以下是我的javascript
var s = new Number(123456789);
alert(s.toLocaleString("en-US"));
这会在chrome中显示结果123,456,789
。但IE 8显示123,456,789.00
。是否有任何限制在IE中添加".00"
的工作?
仅供参考:我已经检查了This,这会在Chrome中出现问题并且搜索谷歌没有任何用处。
答案 0 :(得分:2)
//关注@ RobG的评论我已经改变并简化了以找到任何可能用作小数点的字符(除非它是第一个字符)
var s = new Number(123456789);
var s1 = s.toLocaleString();
var p = new Number(Math.floor(s) + 0.1); // similar value but decimal
var p1 = p.toLocaleString();
var index;
var point;
for (index=p1.length-1; index>0; index--) { // find decimal point in dummy
point = p1.charAt(index);
if (point < '0' || point > '9')
break;
}
if (index > 0) {
index = s1.lastIndexOf(point); // find last point in string
if (index > 0)
s1 = s1.slice(0, index); // truncate decimal part
}
alert(s1);
答案 1 :(得分:2)
您可以测试小数点分隔符并将其删除,然后删除所有内容:
// Work out whether decimal separator is . or , for localised numbers
function getDecimalSeparator() {
return /\./.test((1.1).toLocaleString())? '.' : ',';
}
// Round n to an integer and present
function myToLocaleInteger(n) {
var re = new RegExp( '\\' + getDecimalSeparator() + '\\d+$');
return Math.round(n).toLocaleString().replace(re,'');
}
// Test with a number that has decimal places
var n = 12345.99
console.log(n.toLocaleString() + ' : ' + myToLocaleInteger(n)); // 12,345.99 : 12,346
您需要更改系统设置以进行彻底测试。
如果您想更改内置的 toLocaleString ,请尝试:
// Only modify if toLocaleString adds decimal places
if (/\D/.test((1).toLocaleString())) {
Number.prototype.toLocaleString = (function() {
// Store built-in toLocaleString
var _toLocale = Number.prototype.toLocaleString;
// Work out the decimal separator
var _sep = /\./.test((1.1).toLocaleString())? '.' : ',';
// Regular expression to trim decimal places
var re = new RegExp( '\\' + _sep + '\\d+$');
return function() {
// If number is an integer, call built–in function and trim decimal places
// if they're added
if (parseInt(this) == this) {
return _toLocale.call(this).replace(re,'');
}
// Otherwise, just convert to locale
return _toLocale.call(this);
}
}());
}
只有在为整数添加小数位时,才会修改内置的 toLocaleString 。