JS将科学计数法转成小数形式

function toNonExponential(num) {
    var m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/);
    return num.toFixed(Math.max(0, (m[1] || '').length - m[2]));
}

console.log(toNonExponential(1.23e+10)); // "12300000000"
console.log(toNonExponential(4.56e-5));  // "0.0000456"

这段代码用到了正则表达式和 toFixed,通过 toExponential 拿到科学计数法表示,再解析指数部分,计算需要保留的位数。

实际上,还有一种更简单的方式

function toNonExponentialSimplified(num) {
    return num.toLocaleString('fullwide', { useGrouping: false });
}

console.log(toNonExponentialSimplified(1.23e+10)); // "12300000000"
console.log(toNonExponentialSimplified(4.56e-5));  // "0.0000456"

toLocaleString 是一个强大的方法,它不仅能处理科学计数法,还能直接返回不带逗号分隔的完整数字字符串。只要设置 { useGrouping: false },就能避免默认的千分位分隔符,非常简洁。

在这里顺道说一下JS中原生数字格式化工具

很多人对 Number.prototype 提供的 toExponentialtoFixedtoPrecision 了解得不够深入,这些方法各有妙用。

  • toExponential([fractionDigits])这个方法将数字按科学计数法返回,并可以指定保留的小数位数。 适合处理需要科学计数法表示的场景,比如天文学中的大数。

    let num = 123456;
    console.log(num.toExponential(2)); // "1.23e+5"
    console.log(num.toExponential(4)); // "1.2346e+5"
  • toFixed([fractionDigits])按指定的小数位数返回字符串,直接四舍五入。

    let num = 123.45678;
    console.log(num.toFixed(2)); // "123.46"
    console.log(num.toFixed(0)); // "123"

    注意:这个方法返回的是字符串而不是数字。如果需要保留精度的同时保持类型为数字,可以再包一层 parseFloat

  • toPrecision([precision])根据总有效位数返回格式化字符串。它不仅关注小数点后,还包括小数点前的位数。

    let num = 123.45678;
    console.log(num.toPrecision(2)); // "1.2e+2"
    console.log(num.toPrecision(6)); // "123.457"
    

    适合处理需要总有效位数控制的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值