Javascript 用于IE 8的ToLocalString()

Javascript 用于IE 8的ToLocalString(),javascript,internet-explorer,Javascript,Internet Explorer,下面是我的JavaScript: var s = new Number(123456789); alert(s.toLocaleString("en-US")); 这将在chrome中给出结果123456789。但IE 8显示的是123456789.00。是否有任何变通办法来限制在IE中添加“.00” 仅供参考:我已经检查了Chrome中出现问题的地方,并在谷歌搜索过,但没有任何用处 //在@RobG的评论之后,我对其进行了修改和简化,以找到任何可能用作小数点的字符(除非是第一个字符) va

下面是我的JavaScript:

var s = new Number(123456789);
alert(s.toLocaleString("en-US"));
这将在chrome中给出结果
123456789
。但IE 8显示的是
123456789.00
。是否有任何变通办法来限制在IE中添加
“.00”



仅供参考:我已经检查了Chrome中出现问题的地方,并在谷歌搜索过,但没有任何用处

//在@RobG的评论之后,我对其进行了修改和简化,以找到任何可能用作小数点的字符(除非是第一个字符)

var s=新编号(123456789);
var s1=s.tolocalstring();
var p=新数字(数学楼层+0.1);//类似值,但为十进制
变量p1=p.toLocaleString();
var指数;
var点;
对于(index=p1.length-1;index>0;index--){//find dummy中的小数点
点=p1.字符(索引);
如果(点<'0'|点>'9')
打破
}
如果(索引>0){
index=s1.lastIndexOf(point);//查找字符串中的最后一个点
如果(索引>0)
s1=s1.切片(0,索引);//截断小数部分
}
警报(s1);

您可以测试小数点分隔符,然后删除它以及之后的所有内容:

// 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
您需要更改系统设置以进行彻底测试

编辑 如果要更改内置ToLocalString,请尝试:


这将修改内置ToLocalString,前提是它将小数点添加到整数中。

根据:“此函数依赖于实现”。换言之,对其格式没有控制,每个实现(例如,从一个浏览器到下一个浏览器)的格式可能不同。对于某些情况,它可能是“123.456.789,00”,这取决于浏览器设置,因此您不能简单地从“.”到结尾进行修剪。不接受任何论点,因此依赖于它不是一个好的策略。对于“toLocaleString()”本身有什么解决方法吗?我的实际需要是格式化数字。所以我想到了使用这个函数,结果发现它在IE中是个问题。它应该在IE 8中起作用。它是一个内置的方法,你可以替换它。但这将取代它为每个人。是的,我想我会写我自己的东西像这样,但这完全忽略了地区,并假设它使用“,”作为数千分隔符。您可以测试本地十进制分隔符,并由此推断出千位分隔符。
// 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
// 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);
    }
  }());
}