在javascript货币字符串中移位小数的最佳方法

时间:2017-04-03 17:57:57

标签: javascript rounding currency

所以从阅读中我知道我应该代表美元金额(如10.78美元)整数(1078美分)。

My apps input is sometimes pretty ugly. Stuff like "$10.78533999". I know I can use parseFloat + Math.round like so:

返回Math.round(100 * parseFloat(dollarsAndCentsString.replace(/ [$,] / g,'')));

但我担心舍入错误。我可以做这样详细的事情:

Number.prototype.round = function(places){
    places = Math.pow(10, places); 
    return Math.round((this + Number.EPSILON) * places) / 100;
}

var shiftDecimal = function(amount){
    var amountDecPos = amount.indexOf('.');
    var intAmount = amount.substring(0, amount.indexOf('.'));
    var remainder = parseFloat(amount.substring(amount.indexOf('.') , amount.length ) ).round(2).toString().substr(2);
    return intAmount + remainder;
}

https://jsfiddle.net/eg0as88b/1/

我有一个自定义(我认为非常准确)的舍入函数,操作符仅在小数部分上,以最小化舍入误差。

这有多大意义吗?似乎应该有更好的方式(尤其是表现明智)。谢谢!

1 个答案:

答案 0 :(得分:0)

最好的方法是使用 number.toLocaleString()函数。

这是JavaScript提供的内置函数,用于将数字转换为货币。

实施例。

1   2017-04-01  11:30:00.0000000    11:35:15.0000000    1   Worktime    06:00:00.0000000    18:00:00.0000000
2   2017-04-01  18:45:02.0000000    18:46:05.0000000    2   Freetime    18:00:00.0000000    06:00:00.0000000
3   2017-04-01  03:45:02.0000000    03:46:05.0000000    2   Freetime    18:00:00.0000000    06:00:00.0000000
4   2017-04-01  14:30:00.0000000    14:35:15.0000000    1   Worktime    06:00:00.0000000    18:00:00.0000000

参考链接:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString