如何将gridview中的货币四舍五入为有效数字?

Posted

技术标签:

【中文标题】如何将gridview中的货币四舍五入为有效数字?【英文标题】:How to round currency in gridview to significant figures? 【发布时间】:2012-05-05 06:17:26 【问题描述】:

我有一个从 SQL 表中提取的 gridview,它包含不同的美元数字。它们有数千、数百万或数十亿。我目前正在使用 0:c0 但我有兴趣将其缩小,以便仅显示三个有效数字。

例如,我希望 $3,411,216,512.07 显示为 $3.41B;而 1,066,555.54 美元将显示为 107 万美元。

在 ASP.NET 中是否有一种简单的方法可以做到这一点,或者我需要打破 jQuery 吗?或者,我应该在 C# OnRowDataBound 中执行吗?

【问题讨论】:

在绑定到gridview之前可以修改datasource中的数据吗? 我可以。那么问题就变成了,使用超现实梦想的方法在 SQL 中执行此操作并为每个值添加另一列更好,还是使用其他两个答案在 C# 中执行此操作更好?最终我们只讨论了几百行(大部分在用户询问之前对用户隐藏),所以我怀疑我会看到性能问题。 【参考方案1】:

您可以将数字转换为字符串,获取前四个字符 - 假设是没有单位、逗号等的纯数字 - 将其转换回数字,四舍五入,然后计算原始字符串的长度决定在哪里放置小数点以及用什么来标记它,无论是 B、M、K 等。我建议在服务器端进行,除非您在浏览器中这样做,否则我认为没有意义希望以某种方式使其具有交互性。

【讨论】:

【参考方案2】:

我会在 OnRowDataBound 中执行此操作。检查你的数字是否大于 10 亿,除以 10 亿,string.format 末尾的“B”和前面的货币符号然后返回。 检查数字是否大于一百万...等

您可能可以编写一个算法来动态处理它,但由于这是金钱,而且可能仅限于数万亿美元,因此手动操作应该快得多。

【讨论】:

【参考方案3】:
    if(n>999999)
    
    string number = Convert.ToString(n.slice[0,3]) + "M";
    ... 
//> (apply it to your datatable and then show it (in datagridview if that's
//> what you're using)
    
   else if (n>...)

对于超过十亿等的情况重复此操作,但仍然需要检查逗号的位置。我不知道该怎么做。这就是您可以根据需要获得前 3 个数字并应用“B”或“M”的方法。

【讨论】:

以上是关于如何将gridview中的货币四舍五入为有效数字?的主要内容,如果未能解决你的问题,请参考以下文章

PHP number_format():将数字四舍五入,然后格式化为货币

如何将双精度格式设置为四舍五入到最接近的美元的货币?

GridView中的日期处理

NumberFormatter 在货币模式下对小负数的错误行为

如何格式化gridview列?

在 Java 中浮动到货币