Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中获取小数点后的前两个非零数字_Javascript - Fatal编程技术网

如何在javascript中获取小数点后的前两个非零数字

如何在javascript中获取小数点后的前两个非零数字,javascript,Javascript,我需要从十进制数中得到前两个非零数字。如何做到这一点 假设我有一个像0.000235这样的数字,那么我需要0.00023,如果这个数字是0.000000025666,那么我的函数应该返回0.000000025 有人知道如何用javascript实现这一点吗 结果应该是浮点数而不是字符串。var myNum=0.000256 var myNum = 0.000256 var i = 1 while(myNum < 10){ myNum *= 10 i *= 10 } var

我需要从十进制数中得到前两个非零数字。如何做到这一点

假设我有一个像0.000235这样的数字,那么我需要0.00023,如果这个数字是0.000000025666,那么我的函数应该返回0.000000025

有人知道如何用javascript实现这一点吗

结果应该是浮点数而不是字符串。

var myNum=0.000256
var myNum = 0.000256
var i = 1
while(myNum < 10){
    myNum *= 10
    i *= 10
}
var result = parseInt(myNum) / i
变量i=1 而(myNum<10){ myNum*=10 i*=10 } var result=parseInt(myNum)/i
以下是两种更快的解决方案(请参阅):

解决方案1:

var n = 0.00000020666;
var r = n.toFixed(1-Math.floor(Math.log(n)/Math.log(10)));
var r = n.toFixed(20).match(/^-?\d*\.?0*\d{0,2}/)[0];
请注意,该值不是四舍五入到最小值,而是四舍五入到最接近的值:
0.0256
给出
0.026
,而不是
0.025
。如果您真的想舍入到最小值,请使用以下选项:

解决方案2:

var n = 0.00000020666;
var r = n.toFixed(1-Math.floor(Math.log(n)/Math.log(10)));
var r = n.toFixed(20).match(/^-?\d*\.?0*\d{0,2}/)[0];

它也适用于负数。

对于有那么多小数的数字,您必须返回一个字符串,因为任何解析为数字都将返回科学符号,如
0.0000000 25666
将是
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);
}
函数轮(n,什么){
var i=0;
if(n<1){
而(n<1){
n=n*10;
i++;
}
}
返回“0”。+(新数组(i)).join('0')+n.toFixed(what).替换('.','').slice(0,-1);
}

如果数字大于1怎么办?我将在if条件下单独处理。您是否知道0.000000025666已转换为科学符号2.5666e-8?这种情况会干扰字符串“0”的查找。如果数字是0.0002035,您希望得到什么答案?我认为您应该指定结果是数字类型(float)还是字符串。这取决于您是否只希望数字发送到某个地方(因此不管字符串表示形式如何),或者您是否希望字符串以良好的形式显示它。+1这是您在praveen之后的解决方案,请参阅@urbz此函数,如果数字为0.2056,则不返回0.20我不明白?这与所有被否决的答案有相同的问题,它不考虑科学记数法,因此
0.0000000 25666
在运行parseInt?@praveen之后仍然是
2.5666e-8
,返回0.2。因此,正如您在问题中指定的,如果您希望接收浮点数而不是字符串,那么这是0.20作为浮点数类型的正确表示。这很酷,但不是
0.0256===0.026
,我看到您添加了结果应该是一个浮点数。在这种情况下,您应该将其包装在
parseFloat
中,如果您希望解决方案1同时适用于正数和负数,那么您需要对数中的
n
的绝对值,即
n.toFixed(1-Math.floor(Math.log(Math.abs(n))/Math.log(10))
如果您希望解决方案1适用于0.xxxxx以外的值。。。,例如,75.000002566,你可以使用模运算符:
n.toFixed(1-Math.floor(Math.log(Math.abs(n%1))/Math.log(10))
n.toFixed确实是个错误。我的解决方案更简单,速度更快:;)@dystroy-是的,它们返回一个字符串,但是你的正则表达式更好,这就是为什么我对另一个答案发表了评论,因为我不明白为什么它得到了所有的投票,它仍然有与正则表达式解决方案相同的问题,但正则表达式解决方案对我来说似乎更好。