在 C# 中格式化十进制数
Posted
技术标签:
【中文标题】在 C# 中格式化十进制数【英文标题】:Formatting decimal numbers in C# 【发布时间】:2018-09-18 15:55:20 【问题描述】:如何转换这些数字
例子:
-
77.0227
0.0803
1.1567
分别输入这些数字:
-
77,02
8,03
1,16
这一切都需要使用相同的“格式”来完成。 这些值来自 SQL 中的存储过程,它们总是不同的,但它们需要采用正确的格式。它们都是百分比值。
【问题讨论】:
你搜索过“round”这个词吗? 数据的原始格式是什么?是Decimal
、Single
、Double
?还是String
?
0.0803
和 8,03
远不是同一个数字
只有字符串有格式。 .Net 中的数值被认为是未格式化的,直到您最终将它们转换为字符串,这应该在最后一刻进行。
为什么要将 0.0803 转换为 "8,03" 而不是 "0,08" - 在一个特定情况下,您似乎乘以 100
【参考方案1】:
您可以使用fixed-point ("F") format specifier 舍入到两位数:
decimal number = 77.0227m;
string result = number.ToString("F2");
如果这不能为您提供所需的格式(例如没有逗号但点),那么您必须传递所需的文化。假设你想要西班牙语:
var spanishCulture = new CultureInfo("es-ES");
string result = number.ToString("F2", spanishCulture);
【讨论】:
我如何准确地给 input.ToString("F2") 我想要的数字?抱歉这个可能很愚蠢的问题。我需要传递的值存储在我的程序中的 r[column.ColumnName] 中 @AshkanMobayenKhiabani:或确保使用适当的 CultureInfo,使用逗号作为小数分隔符。 @GustavoJose:我猜r
是数据读取器,然后是r.GetDecimal(r.GetOrdinal(column.ColumnName))
input
是数字(作为常量、字段、属性或参数)。【参考方案2】:
如果你需要逗号作为小数分隔符,你应该指定文化;像这样:
string result = string.Format(new System.Globalization.CultureInfo("es-ES"), "0:#,##0.00", inputValue);
我假设西班牙的文化(西班牙语),所以尝试使用该代码。
查看this fiddle 中的运行示例。
【讨论】:
以上是关于在 C# 中格式化十进制数的主要内容,如果未能解决你的问题,请参考以下文章