小数转二进制
小数转二进制常用的方法有两种:
-
定点存储法
以0.625为例-----转换二进制为:
- 浮点存储法
二进制为:01000001 10011101 00000000 00000000
-
C#里使用浮点存储法,先用定点存储法计算后再进行浮点存储法计算。
-
由于转换时,某些数据比如0.1 小数部分乘2以后不能完全乘尽(0.2, 0.4, 0.8, 0.6 …… 无限循环) 所以小数会出现丢失精度的情况,不能完全准确的表达这些乘不尽的情况,所以遇到类似精度丢失,数据变大了一点点,变小了一点点的问题,知道是这个原理导致的问题,既不是你写错了,也不是计算机出bug了,完全是转换规则的问题,无法避免。float类型换成double提高精度依然会有该问题。想解决精度丢失的问题,可以把数字小数部分当成整数计算 比如a=1.1 b=1.3 计算a+b 可以这样(Math.Round(a10) + Math.Round(b10)) / 10 注意数字别溢出最大范围