这就是我需要的:
121 => 121
14231.439400000 => 14,231.4394
1.123456789 => 1.12345679
-9012.4430001 => -9,012.4430001
我尝试了以下内容:return input.toFixed(8).toLocaleString().replace(/0*$/, '').replace(/\.$/, '');
并且不会添加逗号。我也查看了numeraljs
,但是没有我需要的小数点功能(指定最多8个小数,或者修剪)
任何帮助?
答案 0 :(得分:2)
这适用于任何支持语言环境的浏览器以及MDN上描述的选项:
return input.toLocaleString("en", {
useGrouping: true,
maximumFractionDigits: 8
});
这是一个改编自 Elias Zamaria answer here的替代解决方案:
var x = input.toFixed(8).split('.');
return x[0].replace(/\B(?=(\d{3})+(?!\d))/, ',') +
('.' + x[1]).replace(/\.?0+$/, '');
答案 1 :(得分:1)
或者如果你想自己做:
function fixNumber(number){
var roundedNumber = Math.round(parseFloat(number) * 100000000) / 100000000,
numberString = roundedNumber.toString(),
parts = numberString.split('.'),
integerPart = parts[0],
decimalPart = parts.length > 1 ? parts[1] : '';
integerPart = integerPart.split('').reverse().join('').replace(/(\d{3})/g, '$1,').split('').reverse().join('').replace(/^(-?),/, '$1');
decimalPart = decimalPart.replace(/0+$/, '');
return decimalPart.length ? integerPart + '.' + decimalPart : integerPart;
}
document.write(fixNumber(121) + '<br>');
document.write(fixNumber(14231.439400000) + '<br>');
document.write(fixNumber(1.123456789) + '<br>');
document.write(fixNumber(-9012.4430001) + '<br>');
答案 2 :(得分:1)
国际化支持现在可以在所有浏览器和nodejs中使用。这样做的好处是它是快速且可配置的。例如,您可以指定最小位数和最大十进制精度。
// Decimal Style (1,234,56)
let formatter = new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 8 });
formatter.format(1234.5678); // result: "1,234.57"
// Currency Style ($1,234.56)
let formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 2 });
formatter.format(28761232.291); // result: "$28,761,232"