数字-0是否存在于Javascript中?

时间:2016-10-27 20:06:40

标签: javascript rounding

我正在做一些钱计算,我得到了数字-0。此数字-0不存在,因为0没有符号。为什么会这样?我知道原价在我的bd上有更多的数字。但无论如何,这种行为的事情很奇怪。

所以我正在使用这个数学表达式:我选择项目价格并减去折扣,然后我将其四舍五入。

(19.99923-20).toFixed(2)

我得到“-0.00”!这显示起来很难看。我尝试使用Number()将其设为“实数”,但

 Number((19.99923-20).toFixed(1))

将显示为“-0”。

javascript有什么问题,没有数字-0,应该只是“0”?

2 个答案:

答案 0 :(得分:0)

使用Math.round()toFixed(),JavaScript使用接近0的浮动底片进行签名,两者都可以获得-0。解决了应用快速修复,其中包括检查我们的数字是否在0到-0.005之间进入该范围(舍入到-0.01以后)。考虑2个浮动数字,因为你的例子与金钱一起工作,所以我认为1美分相关的差异:

var num=19.99923-20;
    if(num>-0.005 && num<0){
        num=0; //we set to '0' all -0 
    }else{
        num=num*100;
        num=Math.round(num);
        num=num/100;
    /*or
      num=num.toFixed(2);
    but this way we convert number to string*/

    }

希望它有所帮助。

答案 1 :(得分:0)

toFixed将数字转换为字符串,而不是数字。所以你看到的-0.00是一个字符串。它是转换的结果

19.99923-20 // which is about
-0.0007699999999992713  // in internal representation

到使用toFixed method in ECMAscript standards的字符串,它将结果初始化为“ - ”表示负数,并继续转换正在转换的数字的绝对(正)值。

字符串“ - 0.00”转换回parseFloat("-0.00")Number("-0.00")的数字会返回正零数字表示(javscript使用IEEE 754标准存储数字双精度浮点表示,其确实具有负零值,但这不是问题。)

看看如何修复作品表明唯一的问题是“-0.00”结果,可以使用字符串比较来检查:

 var number = 19.99923-20;
 var str = number.toFixed(2);
 if( str == "-0.00")
     str = "0.00";

或者,您可以考虑使用永远不会返回带负号的零字符串的转换例程,例如:

function convertFixed( number, digits) {
    if(isNaN(number))
        return "NaN";

    var neg = number < 0;
    if( neg)
        number = -number;
    var string = number.toFixed(digits);
    if( neg && Number(string) === 0) // negative zero result
        neg = false;
    return neg ? "-" + string : string;
}