返回信息流比如 0.9 不能被二进制精确表示,那在赋值 `double a = 0.9` 过后,变量a不就应该是IEEE754标准double所能表示的最接近0.9的舍入值吗?但为什么实际上变量a虽然是double类型,但存储了比double类型更精确的值呢?Java这部分的处理机制是怎么样的呢?
```java
System.out.println(a); // 输出 0.9
System.out.println(new BigDecimal(a));
// 输出 0.90000000000000002220446049250313080847263336181640625
```
这是一条镜像帖。来源:北邮人论坛 / java / #62787同步于 2019/10/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
【问题】Java怎么存储不能被精确表示的小数的?
youdianer
2019/10/11镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我的疑问是关于Java对于double类型的处理机制,而不是单精度双精度浮点数的原理,这应该属于语言特性吧,是在csapp哪一节有讲关于Java的这个机制吗?
【 在 buyaogaosuta 的大作中提到: 】
: 参见csapp
是说Java对于double类型隐式地使用了BigDecimal来存储?
【 在 nuanyangyang 的大作中提到: 】
: BigDecimal