【问题标题】:Convert string to decimal to always have 2 decimal places将字符串转换为小数以始终有 2 个小数位
【发布时间】:2016-04-14 09:35:16
【问题描述】:

我正在尝试将字符串转换为小数以始终保留 2 位小数。例如:

  • 25.88 -> 25.88
  • 25.50 -> 25.50
  • 25.00 -> 25.00

但是使用下面的代码,我看到以下内容:

  • 25.88 -> 25.88
  • 25.50 -> 25.5
  • 25.00 -> 25

我的代码:

Decimal.Parse("25.50", CultureInfo.InvariantCulture);

Decimal.Parse("25.00");

Convert.ToDecimal("25.50");

我得到了25.5。是否可以不剪掉多余的

【问题讨论】:

  • Convert.ToDecimal("25.50").ToString("F2");
  • 为什么要在逗号后面加上零?它并没有使数字更加精确或任何东西。
  • 就像您将其显示为字符串一样,您说它需要 2 位小数,正如@DmitryBychenko 所说。十进制始终存储为十进制,尾随零是多余的。
  • @DmitryBychenko 这给了我一个字符串,我需要一个小数
  • @Ben 那你需要一个字符串,而不是小数

标签: c# decimal


【解决方案1】:

Decimal 是一个有点奇怪的类型,所以,从技术上讲,你可以做一点(并且可能是一个肮脏)的把戏:

  // This trick will do for Decimal (but not, say, Double) 
  // notice "+ 0.00M"
  Decimal result = Convert.ToDecimal("25.5", CultureInfo.InvariantCulture) + 0.00M; 

  // 25.50 
  Console.Write(result);

但更好的方法是将Decimal 格式化(表示)到小数点后 2 位,只要您想输出它:

  Decimal d = Convert.ToDecimal("25.50", CultureInfo.InvariantCulture);

  // represent Decimal with 2 digits after decimal point
  Console.Write(d.ToString("F2"));

【讨论】:

  • 不知道这是可能的,奇怪
  • 这很奇怪,但你是对的。你知道它是如何工作的吗?
  • msdn.microsoft.com/en-us/library/system.decimal(v=vs.110).aspx "...和一个用于划分 96 位整数并指定它的哪一部分是小数部分的比例因子。比例因子隐含地是数字 10,提高到指数范围从 0 到 28...";所以2550 - 整数值和100 比例因子
  • 感谢您,没有浪费这一天。我学到了一些新东西。
  • @Ben: 能否请您提供一个反例以代码的形式?
【解决方案2】:

我很惊讶你会遇到这个问题,但如果你想解决它:

yourNumber.ToString("F2") 即使有更多或更少的小数指针,它也会打印到 2 个小数点。

测试:

decimal d1 = decimal.Parse("25.50");
        decimal d2 = decimal.Parse("25.23");
        decimal d3 = decimal.Parse("25.000");
        decimal d4 = Decimal.Parse("25.00");
        Console.WriteLine(d1 + " " + d2 + " " + d3.ToString("F2") + " " + d4);
        Console.ReadLine();

输出:25.50 25.23 25.00 25.00

【讨论】:

  • 这里我有字符串 s1="9.00" 我想输出为十进制 d1=9.00 我该怎么办?我在 C# MVC3 上——
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2011-09-02
  • 2015-08-25
相关资源
最近更新 更多