如何在 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 不请求文化和货币?

c#十进制toString()用逗号(,)转换

如何用jquery中获取超链接中传的值

如何在HTML页面用EL表达式接受JSP页面session中传过来的值?

使用hive -f 向sql文件中传变量

formContext Ribbon WorkBench 按钮中传上下文