停止自动截断 Double 的无关紧要的小数
Stop Automatic Insignificant Decimal Truncating of Double
我有一个 double 我想完全按原样存储,不使用以下任何格式:
示例 #1:double a = 12.
格式化为:12
示例 #2:double b = 50.0
格式化为:50
例 #3:double c = 88.0000000000
格式化为:88
这可能吗,还是我必须将其存储为字符串?
谢谢。
编辑:示例:双精度设置为 52.000
用户单击应用程序中的一个按钮,附加
带有 1 的 52.000。新号码:52.0001
那些曾经微不足道的小数,现在有了意义
因为如果 52.000 中的零更早被拿走
这个数字是 52.1。这是一个完全不同的
来自 52.0001 的号码。因此,为什么零在这方面很重要
情况。
你不能,因为 double
不存储无关紧要的数字。
您的选择:
- 如果您只需要打印零,请使用适当的格式
- 切换到保留零的
decimal
(小心构建它 - Decimal data type is stripping trailing zero's when they are needed to display)。
- 将值保留为字符串以供显示,并在需要进行计算时转换为数字类型。基于编辑,这是您在构建计算器时正在寻找的选项 - 事实上,文本输入应保留为文本,直到用户最终决定输入完成。
如果您使用 decimal
并且不想转换 to/from 字符串,您可能会发现这个有用:
public static int Scale(this Decimal d) => (Decimal.GetBits(d)[3] >>16) & 31;
我有一个 double 我想完全按原样存储,不使用以下任何格式:
示例 #1:double a = 12.
格式化为:12
示例 #2:double b = 50.0
格式化为:50
例 #3:double c = 88.0000000000
格式化为:88
这可能吗,还是我必须将其存储为字符串?
谢谢。
编辑:示例:双精度设置为 52.000 用户单击应用程序中的一个按钮,附加 带有 1 的 52.000。新号码:52.0001 那些曾经微不足道的小数,现在有了意义 因为如果 52.000 中的零更早被拿走 这个数字是 52.1。这是一个完全不同的 来自 52.0001 的号码。因此,为什么零在这方面很重要 情况。
你不能,因为 double
不存储无关紧要的数字。
您的选择:
- 如果您只需要打印零,请使用适当的格式
- 切换到保留零的
decimal
(小心构建它 - Decimal data type is stripping trailing zero's when they are needed to display)。 - 将值保留为字符串以供显示,并在需要进行计算时转换为数字类型。基于编辑,这是您在构建计算器时正在寻找的选项 - 事实上,文本输入应保留为文本,直到用户最终决定输入完成。
如果您使用 decimal
并且不想转换 to/from 字符串,您可能会发现这个有用:
public static int Scale(this Decimal d) => (Decimal.GetBits(d)[3] >>16) & 31;