【问题标题】:Formatting decimal numbers in C#在 C# 中格式化十进制数
【发布时间】:2018-09-18 15:55:20
【问题描述】:

如何转换这些数字

例子:

  1. 77.0227
  2. 0.0803
  3. 1.1567

分别输入这些数字:

  1. 77,02
  2. 8,03
  3. 1,16

这一切都需要使用相同的“格式”来完成。 这些值来自 SQL 中的存储过程,它们总是不同的,但它们需要采用正确的格式。它们都是百分比值。

【问题讨论】:

  • 你搜索过“round”这个词吗?
  • 数据的原始格式是什么?是DecimalSingleDouble?还是String
  • 0.08038,03 远不是同一个数字
  • 只有字符串有格式。 .Net 中的数值被认为是未格式化的,直到您最终将它们转换为字符串,这应该在最后一刻进行。
  • 为什么要将 0.0803 转换为 "8,03" 而不是 "0,08" - 在一个特定情况下,您似乎乘以 100

标签: c# formatting number-formatting


【解决方案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 中的运行示例。

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2013-08-22
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多