c# - 如何在 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$
。
您可以建议我如何使用多个小数来格式化字符串,或者如果有的话,您可以建议我一些更好的解决方案。我会很感激你的回答。
谢谢
解决方案
我会使用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
推荐阅读
- android - Actions 测试工具出现“抱歉,无法获取”错误
- linux - udev - 在一个符号链接下收集 USB 类
- python - 过滤日期时间列
- grails - 如何在一台 Windows 机器上运行不同版本的 grails 并让它们相互交互?
- java - 不能在 child() 中为参数“pathString”传递 null?这是我从 firebase 检索数据时遇到的错误
- r - 删除 pdf_document 中的章节编号
- python - 如何防止 pyqtgraph 使轴大于小部件大小?
- error-handling - newrelic - 通过应用程序环境配置忽略错误消息
- flutter - 在 Flutter 中使用未来构建器可重新排序的 ListView
- typescript - 如何将默认日期值添加到打字稿上的猫鼬模式?