JavaScript 是否考虑本地小数分隔符?

Does JavaScript take local decimal separators into account?(JavaScript 是否考虑本地小数分隔符?)
本文介绍了JavaScript 是否考虑本地小数分隔符?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个以用户本地化格式显示小数的网页,如下所示:

I've got a web page that displays decimals in a user's localized format, like so:

  • 英文:7.75
  • 荷兰语:7,75

如果我在我的机器上的 JavaScript 中将两个数字变量一起添加(其中数字取自上述格式的字符串),我会得到以下结果:

If I add two number variables together in JavaScript on my machine (where the numbers are taken from strings in the above formats) I get the following results:

  • 英文:7.75 + 7.75 = 15.5
  • 荷兰语:7,75 + 7,75 = 0

如果我要在荷兰用户机器上运行此代码,我是否应该期望英语格式的添加返回 0,而荷兰语格式的添加返回 15,5?

If I was to run this code on a Dutch users machine, should I expect the English-formatted addition to return 0, and the Dutch-formatted addition to return 15,5?

简而言之:JavaScript 计算是否在其字符串到数字的转换中使用本地小数分隔符?

In short: Does the JavaScript calculation use local decimal separators in its string to number conversions?

推荐答案

不,分隔符在 javascript Number 中始终是点 (.).所以 7,75 的计算结果为 75,因为 , 调用从左到右的计算(在控制台中尝试:x=1,x+=1,alert(x) 或更多的点 var x=(7,75); alert(x);).如果你想转换一个荷兰语(嗯,不仅仅是荷兰语,比如说 Continental European)格式的值,它应该是一个 String.您可以为 String 原型编写扩展,例如:

No, the separator is always a dot (.) in a javascript Number. So 7,75 evaluates to 75, because a , invokes left to right evaluation (try it in a console: x=1,x+=1,alert(x), or more to the point var x=(7,75); alert(x);). If you want to convert a Dutch (well, not only Dutch, let's say Continental European) formatted value, it should be a String. You could write an extension to the String prototype, something like:

String.prototype.toFloat = function(){
      return parseFloat(this.replace(/,(d+)$/,'.$1'));
};
//usage
'7,75'.toFloat()+'7,75'.toFloat(); //=> 15.5

注意,如果浏览器支持,你可以使用 Number.toLocaleString

Note, if the browser supports it you can use Number.toLocaleString

console.log((3.32).toLocaleString("nl-NL"));
console.log((3.32).toLocaleString("en-UK"));

.as-console-wrapper { top: 0; max-height: 100% !important; }

这篇关于JavaScript 是否考虑本地小数分隔符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)