当我找到此重复二进制的二进制值时,得到5.2的双精度数字 01000000 00010100 11001100 11001100 11001100 11001100 11001100 11001100 当我以编程方式打印二进制值并引用网站时,就像这样 01000000 00010100 11001100 11001100 11001100 11001100 11001100 11001101 如何计算double的二进制位。
根据我的回答,它应打印为 -52 -52 -52 -52 -52 -52 -52 20 64 但真正的答案是 -51 -52 -52 -52 -52 -52 20 64 那一点如何变化?
答案 0 :(得分:1)
如果您在二进制小数中表示十进制小数,例如“ ###。2”,它将是重复的二进制小数。
它是无限重复的,因为0.2不能表示为“小数”点右边的二进制数字的有限(有限)和。第一位代表2 ^(-1)= 0.5,第二位代表2 ^(-2)= 0.25,依此类推。自己尝试一下。
如果您查看5.25的位模式,它将不会重复。
请阅读以下文章:https://en.wikipedia.org/wiki/Fraction_(mathematics)和https://en.wikipedia.org/wiki/Repeating_decimal。
由于double
的大小有限,因此必须在某个点剪切无限重复的数字。因此,在第一种情况下,表示被四舍五入,在第二种情况下,它被四舍五入。
有关更多信息,请参见When should I use double instead of decimal?,甚至适用于C#。