Javascript 将数字格式化为 C#

Posted

技术标签:

【中文标题】Javascript 将数字格式化为 C#【英文标题】:Javascript format a number asin C# 【发布时间】:2011-05-31 07:05:17 【问题描述】:

我有一个数字,目前是 1,657,108,700 并且还在增长。但是我希望它显示为 1,657,108k

javascripthtml 是否有内置函数来执行此操作?

该值正在通过 javascript 设置为 html 中的 span 字段。

[编辑]

从评论中我得到了我的方法:

var start = '1,657,108,700';                
start = (start / 1000).toFixed(0);                                      
var finish = '';
while (start.length > 3)
       
    finish = ','.concat(start.substring(start.length - 3, 3), finish);      
    start = start.substring(0, start.length - 3);
;
finish = start + finish + "k";
return finish;

但是这会返回 1,65,7k 而不是 1,657,108k.. 有谁知道为什么?

【问题讨论】:

可能重复:***.com/questions/2134161/… , ***.com/questions/3177855/… @Andrei Sfat:这绝不是它们中的任何一个的重复。第一个是 C#,我的问题是关于 javascript。第二种方法为我返回 NaNk。 没有我知道的功能,但实现起来很简单。只需除以 1000,执行 Math.floor(或取整),然后在其上附加一个“k”。 这个链接怎么样? :***.com/questions/2685911/… @Andrei Sfat:谢谢,但这也无济于事。 【参考方案1】:
var formattedNumber = Math.round(yourNumber / 1000).toLocaleString() + "k";

把上面的变成一个函数或不适当。我不知道有一个函数可以做到这一点,或者不知道有一种方法可以满足“k”的非英语版本(假设有一些),但至少 toLocaleString() 应该注意逗号而不是句号数以千计的问题。

更新:我在没有测试的情况下发布了上面的内容;当我尝试它时,我发现 toLocaleString() 将 1234 格式化为 1,234.00。我曾想过通过使用正则表达式替换来删除尾随零来修复它,当然我不能确定 toLocaleString() 将使用什么字符作为小数点,所以这不起作用。我想您可以编写一些代码,在“控制”数字(例如 1.1)上使用 toLocaleString(),以在运行时查看它使用什么字符来表示小数。

更新 2 为您更新的问题,手动插入逗号,我是这样做的:

var unformattedNumber = 123456;
var a = unformattedNumber.toString().split("");
for (var i=a.length-3; i >0; i-=3)
   a.splice(i,0,",");
var formattedNumber = a.join("") + "k";

【讨论】:

以上是关于Javascript 将数字格式化为 C#的主要内容,如果未能解决你的问题,请参考以下文章

数字应格式化为 excel 中的数字,而不是文本 C#

在 JavaScript 中将十六进制数字格式化为短 UUID

如何将数字格式化为货币字符串

使用自定义组和小数分隔符将数字格式化为字符串而不更改精度

将 C# Double 格式化为以三的倍数为单位的科学记数法

如果一千或更多,则将数字格式化为 2.5K,否则为 900