c# - 如果 float 为零且采用特定货币格式,如何将小数转换为不带部分的字符串?

标签 c# formatting tostring

例如我有几个小数:

decimal[] arr = { 1, (decimal)1.1, (decimal)1.00 };

它们以俄罗斯卢布表示价格:

var overrideCulture = new System.Globalization.CultureInfo("ru-RU");

当我使用时:

foreach (var d in arr)
{
     string s = d.ToString("c", overrideCulture);
     Console.WriteLine(s);
}

我明白了

1,00p.
1,10p.
1,00p.

结果,但我需要的是,如果分数为零,我不想显示它,但我需要保留货币格式。在这个例子中我想得到:

1p.
1,10p.
1p.

我可以简单地得到像这样的分数:

foreach (var d in arr)
{
     string s = d.ToString("#.##", overrideCulture);
     Console.WriteLine(s);
}

但是货币格式会丢失。

string s = d.ToString("#.##c", overrideCulture);

也不起作用,我得到 1c1,1c

是否有一些不复杂的方法来获得我需要的格式?

最佳答案

我不知道有哪种格式字符串可以做到这一点,但一种方法是:

string format = (d == Math.Round(d,0)) ? "c0" : "c";
string s = d.ToString(format, overrideCulture);

如果 d 可能有超过 2 位小数,并且您不想为任何四舍五入到 .00 的值显示小数,请尝试

string format = (Math.Round(d,2) == Math.Round(d,0)) ? "c0" : "c";
string s = d.ToString(format, overrideCulture);

作为旁注,您可以避免强制转换将常量定义为十进制文字:

decimal[] arr = { 1m, 1.1m, 1.00m };

关于c# - 如果 float 为零且采用特定货币格式,如何将小数转换为不带部分的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13841610/

相关文章:

c# - 数据绑定(bind)后如何将图像设置为数据 GridView 单元格?

Python YAML : Controlling output format

c# - 在数值中设置点而不是逗号

c# - VS2022 - 输入问题

c# - 是否可以使用 C# 交互模式?

c# - 如何返回邮政编码列表 ## 英里半径内的所有实例

c# - RateLimiting - 不正确的限制

WPF:将 bool 值显示为 "Yes"/"No"

java - 第二次单击鼠标后,JTree 节点会更改其表示形式

csv - Powershell Export-Csv提供了不良结果