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(区域设置,已修复)。