首页 > 解决方案 > 如何在 decimal.ToString() 中传递两种不同的数字格式

问题描述

我有两个不同的查询

(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$or 535.50$

您可以建议我如何使用多个小数来格式化字符串,或者如果有的话,您可以建议我一些更好的解决方案。我会很感激你的回答。

谢谢

标签: c#.netstring

解决方案


我会使用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

对于 ja-JP:

¥1,535
¥1,536

推荐阅读