在Node.js中使用.toLocaleString()

所以我写了一个小的帮助方法$xx,xxx.xx使用.toLocaleString()将数字转换为有效的货币格式( $xx,xxx.xx .toLocaleString() 。 当在Chrome中使用它时,一切都按预期工作,但在Node.js中使用时似乎完全损坏。

例:

 var n = 6000 console.log( n.toLocaleString('USD', { style: 'currency', currency: "USD", minimumFractionDigits : 2, maximumFractionDigits : 2 }) ); 

如果你在浏览器中运行它,它打印$6,000.00 。 如果您在Node.js REPL或应用程序中运行此代码段,它将以string的forms返回6000

猜测这是一个Node.js的bug? 有没有在你身边可以做的工作?

基于这个问题 ,似乎决定运送国际化的node.js会让它太大。 你可以npm install intl并且要求那个,它会用一个可以工作的版本replacetoLocaleString

为了防止别人绊倒这一点,这里是我在一个Node.js环境中如何将一个数字格式化为一个有效的美元string。

 Number.prototype.toMoney = function() { var integer = this.toString().split('.')[0]; var decimal = this.getDecimal(); integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ","); if( !decimal || !decimal.length ) { decimal = "00"; } else if ( decimal.length === 1) { decimal += '0'; } else if ( decimal.length > 2 ) { decimal = decimal.substr(0, 2); } return '$' + integer + '.' + decimal; }; Number.prototype.getDecimal = function() { var n = Math.abs(this); var dec = n - Math.floor(n); dec = ( Math.round( dec * 100 ) / 100 ).toString(); if( dec.split('.').length ) { return dec.split('.')[1]; } else return ""; }; 

这里有几个boo-boo,即扩展原生Number原型。 你会想避免这是90%的时间; 这对我的具体实现更具体。

我公然从这个问题上偷了正则expression式的格式。 并且一起攻击了我自己的意志的小数支持。 里程可能有所不同。