在 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”这个词吗? 数据的原始格式是什么?是DecimalSingleDouble?还是String 0.08038,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# 中格式化十进制数的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中将十进制数转换为双精度数会产生差异

如何从C#中的字符串中提取十进制数

从C#中的字符串中提取十进制数[重复]

C#中随机生成的十六进制数

十进制数格式问题

进制格式转换 c#