例如我有几个小数:
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);
也不起作用,我得到 1c
或 1,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/