将数字格式化为每隔1000加逗号的形式

38

我需要以1,234,567的格式对数字1234567进行格式化,但不知道如何实现。 我尝试使用TypeScript的货币管道,但会在数字前面添加USD或$。 我想要删除它并以这种方式格式化数字1,234,567。 我该怎么做?


2
我有点困惑:如果你不想要货币前缀,为什么还要使用货币管道呢?你真正的问题是“如何格式化一个数字,使其在每一千位上都有逗号”吗? - Mike 'Pomax' Kamermans
1
可能是 Angular 2 中的货币管道 的重复问题。 - Aurora0001
@Mike'Pomax'Kamermans,是的,我只需要以这种方式格式化数字1,234,567,以适应1234567。因此,尝试使用货币管道,因为它以我想要的相同方式格式化数字,但带有美元前缀。 - suman
1
可能是如何在JavaScript中使用逗号作为千位分隔符打印数字的重复问题。 - Mike 'Pomax' Kamermans
如果你使用了提供的解决方案,最好标记答案为已接受。;) - Daniel Kucal
显示剩余4条评论
3个回答

67

只需使用数字(十进制)管道即可。

举个例子:

{{ '1234567' | number:'1.0':'en-US' }}

会产生输出 1,234,567

如果您没有更改默认区域设置(通过调用registerLocaleData()或提供LOCALE_ID),那么简单的{{'1234567' | number}}也可以工作。


12
甚至更简单,使用JavaScript内置方法(123456789).toLocaleString() =) - Mike 'Pomax' Kamermans
1
@Aurora0001,添加了示例。我没有预料到这个问题会引起这么多的关注 :) - Daniel Kucal
2
@Mike,那是一个非常有限和不稳定的解决方案。对我来说,(1234567).toLocaleString() 产生的结果是 1 234 567。即使结果是正确的,当有更好的方法可用时,我也不会在严肃的项目中使用它。 - Daniel Kucal
4
@DanielKucal请记得添加本地化信息。如果需要使用逗号,可以使用(1234567).toLocaleString("en")。使用明确的本地化设置是最正确的解决方案。 - Mike 'Pomax' Kamermans
这将产生一个十进制数 1,234,567.00!! - Ian
显示剩余2条评论

16

最后的答案将会是1,234,567.00

注意其中的2位小数。

使用以下管道:

{{ element.total | number: '2.'}}

用以上管道可得到1,234,567


7
这将生成以 01、02、03 等形式表示的个位数。如果只需添加逗号,您可以使用 {{ element.total | number }} - Jun Kang
请提供一个链接,而不是复制粘贴相同的答案。https://dev59.com/9FcP5IYBdhLWcg3wP32t#50364297 - Maihan Nijat
如果在模板中没有添加管道的选项,我们可以在组件文件中做些什么来修改数据? - Pulak Kanti Bhattacharyya
num3.toFixed() 的结果为 177 num3.toFixed(2) 的结果为 177.23 num3.toFixed(6) 的结果为 177.234000 - Itamar

7
根据官方Angular文档中DecimalPipe的说明,其结构定义为{{ value_expression | number [ : digitsInfo [ : locale ] ] }}。我可以通过以下方式实现所需的数字格式化:
{{ myValue | number:'':'en' }}

空字符串 ('') 会导致该管道使用默认的 digitsInfo 值,最小整数位 (minIntegerDigits) 为 1,最小小数位 (minFractionDigits) 为 0,最大小数位 (maxFractionDigits) 为 3。

将区域设置为 en,会使该值在千位、百万位等位置用逗号表示。


在默认语言环境为en-us的情况下,通过“{{ myValue | number }}”似乎也可以实现。 - Michael Sorensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接