UNPKG

1.8 kBJavaScriptView Raw
1var helperStringRepeat = require('./helperStringRepeat')
2var helperNumberOffsetPoint = require('./helperNumberOffsetPoint')
3
4/**
5 * 数值转字符串,科学计数转字符串
6 * @param { Number } num 数值
7 *
8 * @return {Number}
9 */
10function toNumberString(num) {
11 var rest = '' + num
12 var scienceMatchs = rest.match(/^([-+]?)((\d+)|((\d+)?[.](\d+)?))e([-+]{1})([0-9]+)$/)
13 if (scienceMatchs) {
14 var isNegative = num < 0
15 var absFlag = isNegative ? '-' : ''
16 var intNumStr = scienceMatchs[3] || ''
17 var dIntNumStr = scienceMatchs[5] || ''
18 var dFloatNumStr = scienceMatchs[6] || ''
19 var sciencFlag = scienceMatchs[7]
20 var scienceNumStr = scienceMatchs[8]
21 var floatOffsetIndex = scienceNumStr - dFloatNumStr.length
22 var intOffsetIndex = scienceNumStr - intNumStr.length
23 var dIntOffsetIndex = scienceNumStr - dIntNumStr.length
24 if (sciencFlag === '+') {
25 if (intNumStr) {
26 return absFlag + intNumStr + helperStringRepeat('0', scienceNumStr)
27 }
28 if (floatOffsetIndex > 0) {
29 return absFlag + dIntNumStr + dFloatNumStr + helperStringRepeat('0', floatOffsetIndex)
30 }
31 return absFlag + dIntNumStr + helperNumberOffsetPoint(dFloatNumStr, scienceNumStr)
32 }
33 if (intNumStr) {
34 if (intOffsetIndex > 0) {
35 return absFlag + '0.' + helperStringRepeat('0', Math.abs(intOffsetIndex)) + intNumStr
36 }
37 return absFlag + helperNumberOffsetPoint(intNumStr, intOffsetIndex)
38 }
39 if (dIntOffsetIndex > 0) {
40 return absFlag + '0.' + helperStringRepeat('0', Math.abs(dIntOffsetIndex)) + dIntNumStr + dFloatNumStr
41 }
42 return absFlag + helperNumberOffsetPoint(dIntNumStr, dIntOffsetIndex) + dFloatNumStr
43 }
44 return rest
45}
46
47module.exports = toNumberString