【发布时间】:2013-12-10 20:12:01
【问题描述】:
有没有办法让小数变量始终保持小数位。即使小数位只有 0。
例如:
10.00,
100.000,
1000.00,
等等
我知道我们可以使用像 string.Format("{0:0.00}", stringVariable) 这样的字符串变量来实现,但我们可以使用十进制变量来实现。
【问题讨论】:
标签: c# formatting decimal
有没有办法让小数变量始终保持小数位。即使小数位只有 0。
例如:
10.00,
100.000,
1000.00,
等等
我知道我们可以使用像 string.Format("{0:0.00}", stringVariable) 这样的字符串变量来实现,但我们可以使用十进制变量来实现。
【问题讨论】:
标签: c# formatting decimal
10 和 010 都表示完全相同的小数。您无法更改底层小数表示这些值的方式,因为它们根本没有区别。您希望更改将小数表示为字符串的方式,只有将其转换为字符串后才能执行此操作。
【讨论】:
在 .NET System.Decimal 中存储尾随零确实是可能的。
类似于二进制float 和double 类型,decimal 存储为符号位、有效数字和“标度”(指数)。与float 和double 不同,decimal 的值未标准化,因此数字 12345×10-2 在内部不同于 123450×10-3。您可以使用 Parse 或 TryParse 从字符串创建这些。
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'
请注意,尽管x 和y 的表示方式不同,但它们的比较相同。
>>> 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'
【讨论】:
小数只是数字。没有办法强制数字本身等于 10.0110
就像其他发帖人所说的那样,您担心需要将十进制格式转换为字符串供用户查看时会是什么格式,而不是之前。
【讨论】:
System.Decimal 可以存储重要的尾随零。
只需使用 ToString() 重载,例如:
yourDecimal.ToString("0.000");
【讨论】: