如何用逗号而不是点舍入价格?

时间:2019-05-20 08:30:07

标签: javascript

在荷兰,我们使用逗号作为数字,而在其他国家/地区则使用点。例如,我们使用39,99,而在其他国家/地区则使用39.99。

在带有价格的供稿中,我们会使用逗号来表示价格,但是我很难将它们用作数字并将它们四舍五入到逗号后面(或实际上是点后面)两位。

var num1 = "39,1234";
var num = parseInt(num1);
var n = num.toFixed(2);
console.log(n);

这是一个这样的数字。我希望得出39,12。我想的方法是先将其用作字符串。然后将该字符串转换为数字,并使用toFixed将其舍入为两个diget。但结果是39,00,而不是39,12。

也许我想错了,我应该使用其他方式将39,1234视为39.1234,以便正确地将其四舍五入为数字?

如何将39,1234用作数字39,1234而不是字符串?这样我就不必浏览提要,而在所有价格中都先用点号替换逗号?

3 个答案:

答案 0 :(得分:3)

编辑:正则表达式版本

更早之前,我没有意识到OP最初希望将其恢复为“ xx,xx”格式。这是一个更优雅的解决方案:

var num1 = "39,1234";

let n = num1.replace(/(?<=,\d{2})(\d*)$/,"");

console.log(n); //32,12

正则表达式说明:

  

(?<=,\d){2}开始,的后向匹配,后跟数字\d,其中2个{2}。后向匹配项不会被替换。

     

(\d*)$,当我们找到后向模式时,我们将匹配所有\d的更多数字*,直到到达字符串$的末尾。这是将被替换的匹配项。

原始解决方案

您想要的是:

var num1 = "39,1234";

var n = parseFloat(num1.replace(",",".")).toFixed(2);
console.log(n); //39.12

// replaces it back to ",", but now it's a string!
n = n.replace(".",",")

console.log(n); //39,12

说明:

  1. 首先用“。”替换“,”。与replace()

  2. 使用parseFloat()转换为浮点数(不是整数)

  3. 使用.toFixed(2)

  4. 设置为小数点后两位
  5. 替换“。”与“,”。但是现在是字符串了!

注意:如果货币值包含.作为千位分隔符,则此方法将无效。例如“ 40.200,1576”。如果是这种情况,请在将分隔符传递到num1 = num1.replace(".","")行之前,添加另一行parseFloat(...)以剥离分隔符。

答案 1 :(得分:0)

尝试一下

comdecimal= num1.replace(".","")
alert(comdecimal);
dotdecimal= comdecimal.replace(",",".") 
alert(dotdecimal); 
dotdecimal = Math.round(dotdecimal* 100) / 100;
alert(dotdecimal);

答案 2 :(得分:0)

由于您使用的是货币,因此建议您使用JS ES6指定的NumberFormat功能。您的代码应如下所示,并且易于重用:

const formatter = new Intl.NumberFormat('nl-NL', {
  style: 'currency',
  currency: 'EUR',
  minimumFractionDigits: 2
});


console.log(formatter.format('145,53'.replace(',','.')));
//"€ 145,53"