Javascript 打印包含小数的字符串对象

Javascript 打印包含小数的字符串对象,javascript,string,internationalization,decimal,pretty-print,Javascript,String,Internationalization,Decimal,Pretty Print,我使用的是精确记帐,它在调用toFixed()时输出一个字符串 我想以一种国际通用的方式打印十进制结果,就像自动打印和本地格式一样 有没有一种方法可以在国际上格式化包含小数的字符串对象?这应该可以完成这项工作 var myNumber = 123456.78; console.log(myNumber.toLocaleString()); function localize(fixed) { /*Determine decimal symbol and digit grouping sym

我使用的是精确记帐,它在调用
toFixed()
时输出一个字符串

我想以一种国际通用的方式打印十进制结果,就像自动打印和本地格式一样


有没有一种方法可以在国际上格式化包含小数的字符串对象?

这应该可以完成这项工作

var myNumber = 123456.78;
console.log(myNumber.toLocaleString());
function localize(fixed) {
  /*Determine decimal symbol and digit grouping symbol.*/
  var decimalSymbol = '.';
  var digitGroupingSymbol = ',';
  var dummy = 1234.5;
  testResult = dummy.toLocaleString();
  /*Browsers using digit grouping symbol.*/
  if (testResult.length === 7) {
    decimalSymbol = testResult[5];
    digitGroupingSymbol = testResult[1];
  }
  /*Browsers not using digit grouping symbol.*/
  if (testResult.length === 6) {
    decimalSymbol = testResult[4];
    digitGroupingSymbol = (decimalSymbol === '.'? ',': '.');
  }
  /*Format the number.*/
  var result = '';
  var dsIndex = fixed.indexOf('.');
  if (dsIndex < 0) {
    throw new Error('Expected decimal separator \'.\' in "' + fixed + '".');
  }
  for (var i = 0; i < dsIndex; ++i) {
    if (fixed[i] < '0' || fixed[i] > '9') {
      throw new Error('Expected digit, got "' + fixed[i] + '".');
    }
    if (i > 0 && i%3 === dsIndex%3) result += digitGroupingSymbol ;
    result += fixed[i];
  }
  result += decimalSymbol + fixed.substr(dsIndex + 1);
  return result;
}  

/*Demonstration*/
var n1 = '123.4567890';
console.assert(localize(n1));
var n2 = '1234.567890';
console.log(localize(n2));
var n3 = '123456789012345678.1234567890';
console.log(localize(n3));
var n4 = '1234567890123456789.1234567890';
console.log(localize(n4));
var n5 = '12345678901234567890.1234567890';
console.log(localize(n5));
函数本地化(固定){
/*确定十进制符号和数字分组符号*/
变量小数符号='';
变量digitGroupingSymbol=',';
虚拟变量=1234.5;
testResult=dummy.toLocaleString();
/*使用数字分组符号的浏览器*/
if(testResult.length==7){
小数符号=测试结果[5];
digitGroupingSymbol=测试结果[1];
}
/*不使用数字分组符号的浏览器*/
if(testResult.length==6){
小数符号=测试结果[4];
digitGroupingSymbol=(小数符号=='。?',':');
}
/*设置数字格式*/
var结果=“”;
var dsIndex=fixed.indexOf('.');
如果(dsIndex<0){
抛出新错误(“+fixed+”)中的“预期小数分隔符\.\”);
}
对于(变量i=0;i'9'){
抛出新错误('预期数字,获得“'+修复[i]+'”);
}
如果(i>0&&i%3==dsIndex%3)结果+=digitGroupingSymbol;
结果+=固定[i];
}
结果+=小数符号+固定的.substr(dsIndex+1);
返回结果;
}  
/*示范*/
风险值n1='123.4567890';
断言(本地化(n1));
变量n2='1234.567890';
控制台日志(本地化(n2));
变量n3='1234567890121345678.1234567890';
控制台日志(本地化(n3));
变量n4='12345678901213456789.1234567890';
控制台日志(本地化(n4));
变量n5='123456789001234567890.1234567890';
控制台日志(本地化(n5));
输出:
123.4567890
1.234.567890
123.456.789.012.345.678.1234567890
1.234.567.890.123.456.789.1234567890

12.345.678.901.234.567.890.1234567890

正确,但它可以获得本地十进制符号和数字分组符号。我没有检查当前浏览器在
dummy.tolocalString()上可以返回什么,但作为一个示例,我实现了一个默认值和两个特定回复。B.t.w.Firefox 28.0和我的地区回复1234.5。如果当前的实现不够快。我们可以将函数拆分为一个函数detectLocale(),返回一个区域设置和另一个函数localize(区域设置,已修复)。