我正在尝试正确格式化一些 double ,以便它们能够正确显示以供我使用(我正在 Devexpress 中构建一个声明,所以我正在处理大量数字)。
以下是我希望发生的基本格式设置规则:
1000.2 -> 1,000.20
1000 -> 1,000
1000.22 -> 1,000.22
在 C# 中使用字符串格式化是否可行?我尝试了以下方法,但未能实现我的目标:
#,#.## - gives me 1,000.2 for the first value
#,#.#0 - gives me 1,000.00 for the second value
#,#.00 - gives me 1,000.00 for the second value
编辑:更多信息。 DevExpress 使我能够在将值绑定(bind)到报表后使用字符串格式来设置值。我们在报告时执行此操作(而不是在幕后代码中的计算时),因为我们在 DevExpress 提供给我们的表格中使用 Sum 函数。我们这样做的原因是,我们可以通过提取大量数据来最大程度地减少对数据库的调用,然后在语句中反复使用该表并根据其中的限制进行过滤。
编辑编辑: 根据我在评论中收到的反馈,仅提供字符串格式无法执行我想执行的格式设置;当我向报告提供数据(然后从报告中删除所有格式)并在代码级别执行所有求和函数时,我需要插入一些代码(以确保总和值具有预期的小数位) ,或者我需要在末尾接受 .00,例如,一定数量的日元(例如,100 日元永远不会表示为 100.00 日元)。
这是一个有点深奥的案例,但很高兴知道!
最佳答案
您可以将字符串格式与简单的 if 条件结合使用。为了缩短它的使用时间,您还可以将其设为扩展方法。它看起来像这样:
public static string FormatConditionnaly(this double input)
{
return input % 1 == 0 ? input.ToString("#,0") : input.ToString("#,0.00");
}
基本上,如果您的数字不包含任何小数(% 1 == 0
检查),您可以将其格式化为不带小数。如果检查失败,则添加两个零。
它是这样使用的:
const double flatNumber = 1000;
string result1 = flatNumber.FormatConditionnaly(); //1,000
const double numberWithDecimals = 1000.5;
string result2 = numberWithDecimals.FormatConditionnaly(); //1,000,50
关于c# - 格式化字符串以显示自定义十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20844317/