java 为什么浮点数运算会有误差?
为什么浮点数运算会有误差?完全地说,这并不是说“浮点数必须有错误”,而是“使用二进制浮点数来表示十进制小数在大多数情况下都会有错误。”。比如十进制0.1转换成二进制是一个无限循环浮点数,尾数是无限的,
为什么浮点数运算会有误差?
完全地说,这并不是说“浮点数必须有错误”,而是“使用二进制浮点数来表示十进制小数在大多数情况下都会有错误。”。比如十进制0.1转换成二进制是一个无限循环浮点数,尾数是无限的,但实际存储只能存储几个位,自然有错误。根据你的说法,十进制也有错误。π不能完全用十进制表示,1/3不能完全用十进制表示
Java浮点数据类型有两种:float和double。Float是单精度浮点,占32位,其对应的封装类是Float。Double是双精度浮点,占64位,其对应的封装类是Double。有关float类和double类的详细信息,请参阅javaapi。
注意
数据类型占用的位数范围:
float表示3.4e-038~3.4e 038的数据范围;
double表示1.7e-308~1.7e 308的数据范围;
double比单精度类型float精度更高,表示范围更大,并经常用于科学计算等高精度场合。
变量定义示例
float f=123.456f//指定变量f为float类型
double D=123.456//指定变量D为double类型和默认的浮点数类型
java浮点型数据表示方法有几种,各是什么?
单精度有1个符号、8个指数和23个小数位。
双精度是1号,11指数,52十进制。
单精度十进制在计算机中只有23位(二进制),转换成十进制只能保证6位十进制数字的精度。超过此精度的十进制运算(二进制23,十进制6)将被截取,导致精度损失和计算结果不准确。
同样,双精度,十进制是52(二进制),转换成十进制只能保证15。