You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

47 lines
1.7 KiB

var helperStringRepeat = require('./helperStringRepeat')
var helperNumberOffsetPoint = require('./helperNumberOffsetPoint')
/**
* 数值转字符串,科学计数转字符串
* @param { Number } num 数值
*
* @return {Number}
*/
function toNumberString(num) {
var rest = '' + num
var scienceMatchs = rest.match(/^([-+]?)((\d+)|((\d+)?[.](\d+)?))e([-+]{1})([0-9]+)$/)
if (scienceMatchs) {
var isNegative = num < 0
var absFlag = isNegative ? '-' : ''
var intNumStr = scienceMatchs[3] || ''
var dIntNumStr = scienceMatchs[5] || ''
var dFloatNumStr = scienceMatchs[6] || ''
var sciencFlag = scienceMatchs[7]
var scienceNumStr = scienceMatchs[8]
var floatOffsetIndex = scienceNumStr - dFloatNumStr.length
var intOffsetIndex = scienceNumStr - intNumStr.length
var dIntOffsetIndex = scienceNumStr - dIntNumStr.length
if (sciencFlag === '+') {
if (intNumStr) {
return absFlag + intNumStr + helperStringRepeat('0', scienceNumStr)
}
if (floatOffsetIndex > 0) {
return absFlag + dIntNumStr + dFloatNumStr + helperStringRepeat('0', floatOffsetIndex)
}
return absFlag + dIntNumStr + helperNumberOffsetPoint(dFloatNumStr, scienceNumStr)
}
if (intNumStr) {
if (intOffsetIndex > 0) {
return absFlag + '0.' + helperStringRepeat('0', Math.abs(intOffsetIndex)) + intNumStr
}
return absFlag + helperNumberOffsetPoint(intNumStr, intOffsetIndex)
}
if (dIntOffsetIndex > 0) {
return absFlag + '0.' + helperStringRepeat('0', Math.abs(dIntOffsetIndex)) + dIntNumStr + dFloatNumStr
}
return absFlag + helperNumberOffsetPoint(dIntNumStr, dIntOffsetIndex) + dFloatNumStr
}
return rest
}
module.exports = toNumberString