weixin_42436619
ぃ纠结偏执。
采纳率0%
2019-05-09 09:58

JS怎么将科学记数法不丢失精度转换成正常数值或者字符串?

5

2.4020064192E+18,正确显示应该是:2402006419200004257
但是目前用parseFloat().toString(),可以转换,但是精度丢失了,其他正则方法也试过都是会四舍五入,各位大神有没有什么好的解决办法呀

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • weixin_40324064 weixin_40324064 2年前

    首先,需要将科学计数法转换成一下:
    例如:
    BigDecimal bd = new BigDecimal("3.40256010353E11");
    然后转换成字符串:
    String str = bd.toPlainString();
    如果这个数字的长度是在int的范围内的话,是可以转换成int类型:
    int a = Integer.parsInt(str);
    如果这个数字的长度不是在Int范围内的话,得到的就不是你想要的数字了。
    数字在以浮点数储存到内存中后超出精度外的数据都丢失了呀,还能有方法找回?
    单精度4字节32位
    双精度8字节64位
    他们所能表达的十进制有效数字就是7位或者15位,不可能再多,否则就不是浮点数了。

    点赞 评论 复制链接分享
  • u013219624 tommer911 2年前

    用js-big-decimal.min.js, js-big-decimal.min.js去这里下载https://www.npmjs.com/package/js-big-decimal

    test

    function test() { var temp = new bigDecimal("2402006419200004257"); console.log(temp); }
    点赞 评论 复制链接分享
  • m0_37852904 阡路陌人 2年前

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

    点赞 评论 复制链接分享

相关推荐