html5怎样转换成数字,JavaScript数字转字符串的问题

(5e-7).toString() === “5e-7” ?

回答

拿一个函数和字符串比较?

以下两种情况,JavaScript 会自动将数值转为科学计数法表示

(1) 小于1且小数点后面带有6个0以上的浮点数值:

JavaScript 代码:

0.0000003 // 3e-7

0.00000033 // 3.3e-7

0.000003 // 0.000003

(2) 整数位数字多于21位:

JavaScript 代码:

1234567890123456789012 //1.2345678901234568e+21

1234567890123456789012.1 //1.2345678901234568e+21

123456789012345678901 //123456789012345680000

// 可以处理上面第一种情况

test((5e-7).toString()); // "0.0000005"

test((5e-9).toString()); // "0.000000005"

function test(val) {

const e = String(val)

let rex = /^([0-9])\.?([0-9]*)e-([0-9])/

if (!rex.test(e)) return val

const numArr = e.match(rex)

const n = Number('' + numArr[1] + (numArr[2] || ''))

const num = '0.' + String(Math.pow(10, Number(numArr[3]) - 1)).substr(1) + n

return num.replace(/0*$/, '') // 防止可能出现0.0001540000000的情况

}

试了一下,toFixed 好像也可以,只不过得处理一下尾部的 0

bVcNjy0.webp

具体成因楼上也介绍了,是规范的问题

bVcNjxx.webp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值