提问人:jiggy1965 提问时间:5/20/2019 更新时间:5/20/2019 访问量:924
如何用逗号而不是点对价格进行四舍五入?
How to round of prices with comma's instead of dots?
问:
在荷兰,我们在数字中使用逗号,而在其他国家/地区则使用点。例如,我们使用 39,99,在其他国家/地区使用 39.99。
在带有价格的提要中,我们会使用逗号来获得价格,但是我无法将它们用作数字并将它们四舍五入逗号后面(或点后面)两位数。
var num1 = "39,1234";
var num = parseInt(num1);
var n = num.toFixed(2);
console.log(n);
这是一个这样的数字。我希望它能得到 39,12。他们的想法是首先将它用作字符串。然后将该字符串转换为一个数字,并使用 toFixed 将其四舍五入为两个数字。但它的结果是 39,00 而不是 39,12。
也许我想错了,我应该使用其他方式使 39,1234 被视为 39.1234,以便将其正确四舍五入为一个数字?
如何使用 39,1234 作为数字 39,1234 而不是字符串?这样我就不必通过提要并在所有价格中首先用点替换逗号?
答:
编辑:正则表达式版本
早些时候我没有意识到 OP 最初希望它恢复为“xx,xx”格式。这是一个更优雅的解决方案:
var num1 = "39,1234";
let n = num1.replace(/(?<=,\d{2})(\d*)$/,"");
console.log(n); //32,12
正则表达式解释:
(?<=,\d){2}
开始后跟数字的 lookbehind 匹配,其中 2 个。Lookbehind 匹配不会被替换。,
\d
{2}
(\d*)$
当我们找到 lookbehind 模式时,我们匹配更多的数字,所有这些数字,直到我们到达字符串的末尾。这是将被替换的比赛。\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()
设置为小数点后 2 位,使用
.toFixed(2)
将“.”改为“,”。但现在它是一根绳子!
注意:如果货币值包含千分隔符,这将不起作用。例如“40.200,1576”。如果是这种情况,请添加另一行以去除分隔符,然后再将其传递到该行。.
num1 = num1.replace(".","")
parseFloat(...)
评论
试试这个
comdecimal= num1.replace(".","")
alert(comdecimal);
dotdecimal= comdecimal.replace(",",".")
alert(dotdecimal);
dotdecimal = Math.round(dotdecimal* 100) / 100;
alert(dotdecimal);
评论
"1.039,1234"
由于您使用的是货币,因此我建议使用 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"
评论