如何以十进制传递两种不同的数字格式.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$535.50$.

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

谢谢

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

最新更新