我在 stackoverflow 上的不同帖子和 C# 文档中读到,将 long
(或任何其他表示数字的数据类型)转换为 double
会失去精度。由于 float 的表示,这一点非常明显。
我的问题是,如果将较大的数字转换为 double
,精度损失有多大?我是否必须期望差异大于 +/- X?
我想知道这一点的原因是我必须处理一个 long
的连续计数器。这个值被我的应用程序读取为 string
,需要转换并且必须除以例如10 或其他一些小数字,然后进一步处理。
decimal
是否更适合这项任务?
最佳答案
converting
long
(or any other data type representing a number) todouble
loses precision. This is quite obvious due to the representation of floating point numbers.
这没有看起来那么明显,因为精度损失取决于 long
的值。对于 -252 和 252 之间的值,根本没有精度损失。
How big is the loss of precision if I convert a larger number to double? Do I have to expect differences larger than +/- X
对于幅度大于 252 的数字,您将遇到一些精度损失,具体取决于您超过 52 位限制的程度。如果您的 long
的绝对值适合 58 位,那么您的精度损失幅度将为 58-52=6 位,或 +/-64。
Would
decimal
be more appropriate for this task?
decimal
与 double
具有不同的表示形式,并且使用不同的基数。由于您打算将您的数字除以“小数字”,因此不同的表示形式会给您带来不同的除法错误。具体来说,double
会更好地处理除以 2 的幂(2、4、8、16 等),因为这种除法可以通过从指数中减去来完成,而无需触及尾数。同样,大的 decimal
在除以 10、100 等时不会丢失有效数字。
关于c# - 将 long 转换为 double 的精度损失有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783923/