如何在 decimal.ToString() 中传递两种不同的数字格式 [重复]
Posted
技术标签:
【中文标题】如何在 decimal.ToString() 中传递两种不同的数字格式 [重复]【英文标题】:How to Pass two Different Number Formats in decimal.ToString() [duplicate] 【发布时间】:2021-09-21 18:29:50 【问题描述】:我有两个不同的查询
(535.00).ToString("C", CultureInfo.CreateSpecificCulture(Configuration.UICulture));
但我想要的是,如果小数点后有 0
,我不想显示 decimal
数字,如果还有其他东西,例如 535.50
,那么我只想显示小数点,所以我我已经解决了decimal.ToString("G29")
的解决方案,现在我无法做到这一点,因为我已经在使用$
符号的文化格式,并且该值已转换为string
。
所以,我想同时使用string.ToDecimal("G29")
和
string.ToString("C", CultureInfo.CreateSpecificCulture(Configuration.UICulture))
因为我希望结果值是 535$
或 535.50$
。
你可以建议我如何使用多个小数来格式化字符串,或者如果你有的话,你可以建议我一些更好的解决方案。我会很感激你的回答。
谢谢
【问题讨论】:
不确定您是否可以仅使用格式字符串或文化信息对象来解决此问题。一个相当幼稚的解决方案是.Replace(".00$", "$")
,但我不喜欢它。
类似... dotnetfiddle.net/SVhV5w ?还是dotnetfiddle.net/Aof5mG?
不,但我需要使用文化而不是硬编码的“$”来保持代码的一致性
【参考方案1】:
我会使用n2
数字格式来获得两位小数,然后删除任何.00
部分,确保使用正确的小数分隔符,最后添加货币符号。
decimal input = 535.00m; // or 535.50m
var cultureInfo = CultureInfo.CreateSpecificCulture(Configuration.UICulture);
string nullDecimal = numberFormat.NumberDecimalSeparator + "00";
string output = input.ToString("n2", cultureInfo).Replace(nullDecimal, "") +
cultureInfo.NumberFormat.CurrencySymbol;
显示535$
或535.50$
。
你也可以直接使用货币格式
string output = input.ToString("c2", cultureInfo).Replace(nullDecimal, "")
但这会将 $ 符号放在我认为的数字之前。
请注意,n2
会产生数千个(组)分隔符(例如 1,535.50$
)。如果您不想这样做,请改用f2
。
c
格式产生与NumberFormatInfo.CurrencyDecimalDigits
中指定的一样多的数字。因此,您可能希望使用这个并获取要动态删除的 0 小数位数
decimal[] inputs = 1535.00m, 1535.50m ;
foreach (decimal input in inputs)
var cultureInfo = CultureInfo.CreateSpecificCulture(Configuration.UICulture);
NumberFormatInfo numberFormat = cultureInfo.NumberFormat;
string nullDecimal = numberFormat.NumberDecimalSeparator +
new string('0', numberFormat.CurrencyDecimalDigits);
string output = input.ToString("c", cultureInfo).Replace(nullDecimal, "");
Console.WriteLine(output);
对于 en-US,打印:
$1,535
$1,535.50
对于日本-日本:
¥1,535
¥1,536
【讨论】:
货币格式控制货币符号的数字(逗号或小数点或空格)的标点符号以及基于文化的货币符号的位置。有些文化将货币符号放在数字的末尾,因此使用货币格式肯定会更安全。 @TJRockefeller,是的。查看我的最终解决方案。以上是关于如何在 decimal.ToString() 中传递两种不同的数字格式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 C# decimal ToString 不请求文化和货币?