我需要从十进制数字中获取前2个非零数字。如何实现这一目标?
假设我有0.000235的数字然后我需要0.00023,如果数字是0.000000025666那么我的函数应该返回0.000000025。
任何人都可以知道如何在javascript中实现这一目标吗?
结果应该是浮点数而不是字符串。
答案 0 :(得分:9)
以下是两个更快的解决方案(请参阅jsperf):
解决方案1:
var n = 0.00000020666;
var r = n.toFixed(1-Math.floor(Math.log(n)/Math.log(10)));
请注意,此值不会舍入到最小值,但最接近:0.0256
得{4},而不是0.026
。如果你真的想要圆到最小,请使用这个:
解决方案2:
0.025
它也适用于负数。
答案 1 :(得分:3)
var myNum = 0.000256
var i = 1
while(myNum < 10){
myNum *= 10
i *= 10
}
var result = parseInt(myNum) / i
答案 2 :(得分:2)
对于具有多个小数的数字,您必须返回一个字符串,因为任何解析为数字都会返回科学记数法,因为在0.000000025666
中2.5666e-8
function round(n, what) {
var i = 0;
if (n < 1) {
while(n < 1) {
n = n*10;
i++;
}
}
return '0.' + (new Array(i)).join('0') + n.toFixed(what).replace('.','').slice(0,-1);
}