numeral.js - 负数舍入/格式化问题

时间:2018-02-07 21:13:31

标签: javascript numeral.js

当舍入到最接近的负数100时,我正在使用numeral.js格式化问题。

为什么它将零美元符号置于零值之前的思考?

FIDDLE

var num1 = numeral(-0.006).format('$0,0.00');
var num2 = numeral(-0.002).format('$0,0.00');

document.getElementById("num1").innerHTML = num1;
document.getElementById("num2").innerHTML = num2;

1 个答案:

答案 0 :(得分:2)

可能是numeral.js中的错误。无论如何,如果你正在尝试这样做,你可以放弃对numbers.js的依赖,只需使用普通的Javascript MathtoLocaleString()来处理这个问题。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

https://jsfiddle.net/qL41jg1x/

function toUSCurrency(x) {
   var n = Math.round(x*100)/100
   return n.toLocaleString(
            'en-US' , 
            { 
                style: 'currency' , 
                currency: 'USD' ,
                minimumFractionDigits: 2 ,
                maximumFractionDigits: 2 
             }
        ) ;
}

document.getElementById("num1").innerHTML = toUSCurrency(-0.006);
document.getElementById("num2").innerHTML = toUSCurrency(-0.002);
document.getElementById("num3").innerHTML = toUSCurrency(-10000000.002);
document.getElementById("num4").innerHTML = toUSCurrency(10000000.002);

注意: 1)如果你必须处理非常大的小数,Math.round()可以进入数字的浮点性质。

2)toLocaleString()似乎得到了所有当前主流浏览器的支持。 https://caniuse.com/#feat=internationalization