在荷兰,我们使用逗号作为数字,而在其他国家/地区则使用点。例如,我们使用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而不是字符串?这样我就不必浏览提要,而在所有价格中都先用点号替换逗号?
答案 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
说明:
首先用“。”替换“,”。与replace()
使用parseFloat()
转换为浮点数(不是整数)
使用.toFixed(2)
替换“。”与“,”。但是现在是字符串了!
注意:如果货币值包含.
作为千位分隔符,则此方法将无效。例如“ 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"