当在字符串上下文中使用时,JavaScript将超过21位的整数转换为科学符号。我打印了一个整数作为URL的一部分。我怎样才能阻止这种转变的发生?
当前回答
这就是我最终使用的从输入中获取值的方法,扩展小于17位的数字并将指数数转换为x10y
// e.g.
// niceNumber("1.24e+4") becomes
// 1.24x10 to the power of 4 [displayed in Superscript]
function niceNumber(num) {
try{
var sOut = num.toString();
if ( sOut.length >=17 || sOut.indexOf("e") > 0){
sOut=parseFloat(num).toPrecision(5)+"";
sOut = sOut.replace("e","x10<sup>")+"</sup>";
}
return sOut;
}
catch ( e) {
return num;
}
}
其他回答
你的问题:
number :0x68656c6c6f206f72656f
display:4.9299704811152646e+23
你可以使用这个:https://github.com/MikeMcl/bignumber.js
用于任意精度的十进制和非十进制算术的JavaScript库。
是这样的:
let ten =new BigNumber('0x68656c6c6f206f72656f',16);
console.log(ten.toString(10));
display:492997048111526447310191
这对我没有帮助:
console.log( myNumb.toLocaleString('fullwide', {useGrouping:false}) );
但这:
value.toLocaleString("fullwide", {
useGrouping: false,
maximumSignificantDigits: 20,
})
我有同样的问题与甲骨文返回科学符号,但我需要一个url的实际数字。我只是用了一个PHP技巧减去0,得到了正确的数字。
例如,5.4987E7是val。
newval = val - 0;
Newval现在等于54987000
你可以用从指数模块。它是轻量级的,并且经过了充分的测试。
import fromExponential from 'from-exponential';
fromExponential(1.123e-10); // => '0.0000000001123'
function printInt(n) { return n.toPrecision(100).replace(/\..*/,""); }
有一些问题:
0.9显示为“0” -0.9显示为"-0" 1e100显示为“1” 仅适用于~1e99 =>以下的数字,对于更大的数字使用其他常数;或者更小的优化。