2.4020064192E+18,正确显示应该是:2402006419200004257
但是目前用parseFloat().toString(),可以转换,但是精度丢失了,其他正则方法也试过都是会四舍五入,各位大神有没有什么好的解决办法呀
用js-big-decimal.min.js, js-big-decimal.min.js去这里下载https://www.npmjs.com/package/js-big-decimal
function test() { var temp = new bigDecimal("2402006419200004257"); console.log(temp); }首先,需要将科学计数法转换成一下:
例如:
BigDecimal bd = new BigDecimal("3.40256010353E11");
然后转换成字符串:
String str = bd.toPlainString();
如果这个数字的长度是在int的范围内的话,是可以转换成int类型:
int a = Integer.parsInt(str);
如果这个数字的长度不是在Int范围内的话,得到的就不是你想要的数字了。
数字在以浮点数储存到内存中后超出精度外的数据都丢失了呀,还能有方法找回?
单精度4字节32位
双精度8字节64位
他们所能表达的十进制有效数字就是7位或者15位,不可能再多,否则就不是浮点数了。
function toNonExponential(num) {
var m = num.toExponential().match(/\d(?:.(\d*))?e([+-]\d+)/);
return num.toFixed(Math.max(0, (m[1] || '').length - m[2]));
}