【问题标题】:How to make a decimal variable hold/show decimal places, even if decimal places are only zeros?即使小数位仅为零,如何使小数变量保持/显示小数位?
【发布时间】:2013-12-10 20:12:01
【问题描述】:

有没有办法让小数变量始终保持小数位。即使小数位只有 0。

例如:

10.00,
100.000,
1000.00,
等等

我知道我们可以使用像 string.Format("{0:0.00}", stringVariable) 这样的字符串变量来实现,但我们可以使用十进制变量来实现。

【问题讨论】:

    标签: c# formatting decimal


    【解决方案1】:

    10010 都表示完全相同的小数。您无法更改底层小数表示这些值的方式,因为它们根本没有区别。您希望更改将小数表示为字符串的方式,只有将其转换为字符串后才能执行此操作。

    【讨论】:

    • '...只有将其转换为字符串后才能这样做'-回答我的问题。谢谢!
    【解决方案2】:

    在 .NET System.Decimal 中存储尾随零确实是可能的。

    类似于二进制floatdouble 类型,decimal 存储为符号位、有效数字和“标度”(指数)。与floatdouble 不同,decimal 的值未标准化,因此数字 12345×10-2 在内部不同于 123450×10-3。您可以使用 ParseTryParse 从字符串创建这些。

    IronPython 2.7.1 (2.7.0.40) on .NET 4.0.30319.1008
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from System import *
    >>> x = Decimal.Parse("123.45")
    >>> y = Decimal.Parse("123.450")
    >>> x.ToString()
    '123.45'
    >>> y.ToString()
    '123.450'
    

    请注意,尽管xy 的表示方式不同,但它们的比较相同。

    >>> x == y
    True
    

    不需要中间 string 对象的替代方法(但对程序员不太友好)是使用采用数字组成部分的 the constructor

    >>> x = Decimal(12345, 0, 0, False, 2)
    >>> y = Decimal(123450, 0, 0, False, 3)
    

    但是,在大多数情况下,您实际上只关心显示一定数量的小数位,而不是存储它们。这可以使用string.Format 轻松完成。

    >>> String.Format("{0:0.00}", x)
    '123.45'
    >>> String.Format("{0:0.000}", x)
    '123.450'
    

    【讨论】:

      【解决方案3】:

      小数只是数字。没有办法强制数字本身等于 10.0110

      就像其他发帖人所说的那样,您担心需要将十进制格式转换为字符串供用户查看时会是什么格式,而不是之前。

      【讨论】:

      • System.Decimal 可以存储重要的尾随零。
      • 也许我应该说得更清楚些。它可以存储一个重要的零,但我相信 OP 想要的是从较低的精度向上舍入位数并任意保留它们。
      【解决方案4】:

      只需使用 ToString() 重载,例如:

      yourDecimal.ToString("0.000");
      

      【讨论】:

      • OP 说他知道你可以在一个字符串中做到这一点,他想直接做到小数。
      • 好吧,对不起,如果您认为这不合适,但如果与输出无关,我要求“保留”小数部分似乎不合逻辑......我的解决方案可以提供输出跨度>
      • 所以,-1 表示正确答案(没有人知道数字 ToString 重载,没有在将它们转换为字符串之前)和 0 表示不合逻辑的问题?这似乎更不合逻辑......但我接受它。
      • 正确与否,它根本不回答这个问题。 OP想知道十进制,你只需重复他所说的他对字符串的了解。
      猜你喜欢
      • 2013-12-26
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多