問題描述
我有一個以用戶本地化格式顯示小數的網頁,如下所示:
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 是否考慮本地小數分隔符?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!