dingpf1209
离恨天蓑衣客
采纳率44.4%
2018-05-16 03:37

Java中整形向浮点类型强制转换精度丢失问题

5
已采纳

这里我就以int转换为float为例。int 在内存中占用四个字节,取值范围是 -2 147 483 648 ~ 2 147 483 6487,float 在内存中占用内存同样是四个字节,取值范围 大约是正负3.40282347E+38F(有效位数6~7位),当我们将一个int整数12345678转换为float类型时,因为他包含的位数比float类型所能表达的位数多,所以会丢失精度。
那么,请问此处提到的float类型的位数是不是说的flaot类型十进制下的有效位数?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    但是呢,我们的intel x87 cpu,内部使用的是80位精度,这意味着,中间运算的精度实际上要比double/float的精度高。但是一些编译器会用isse/avx等指令加速,而这些指令的精度就没有那么高了,所以这也是为什么不能直接比较两个浮点数的原因。因为没法保证不同环境下运算的结果精确的一致。

    点赞 1 评论 复制链接分享
  • chaofei3692 chaofei3692 3年前

    你试试BigDecimal,应该可以解决精度丢失问题。

    点赞 评论 复制链接分享
  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    是的,从二进制的角度看,float是32bit的,尾数是23bit(double是64bit精度,其中尾数是52bit)

    点赞 评论 复制链接分享