首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JavaScript数字格式化为裁剪零并带有逗号

将JavaScript数字格式化为裁剪零并带有逗号
EN

Stack Overflow用户
提问于 2014-01-20 15:43:17
回答 3查看 1.6K关注 0票数 2

我需要的是:

代码语言:javascript
复制
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个小数,或修整)

有什么帮助吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-20 15:57:48

这应该适用于任何支持区域设置和MDN上描述的选项的浏览器。

代码语言:javascript
复制
return input.toLocaleString("en", { 
    useGrouping: true, 
    maximumFractionDigits: 8 
});

游行示威

这里有一个替代的解决方案,改编自Elias的回答这里

代码语言:javascript
复制
var x = input.toFixed(8).split('.');
return x[0].replace(/\B(?=(\d{3})+(?!\d))/, ',') + 
       ('.' + x[1]).replace(/\.?0+$/, '');

游行示威

票数 2
EN

Stack Overflow用户

发布于 2014-01-20 16:13:04

或者如果你想自己做的话

代码语言:javascript
复制
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>');

JSFiddle

票数 1
EN

Stack Overflow用户

发布于 2018-09-14 08:04:20

现在,所有浏览器和nodejs都可以随时提供国际化支持。这样做的好处是它是快速的和可配置的。例如,您可以指定最小的十进制精度数和最大值。

代码语言:javascript
复制
// 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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21238160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档