int和double除以双java

 cool瀚_325 发布于 2023-02-05 09:30

我该如何解释如下:

    double o = 2.3;
    int i = (int) (o * 100000.0);
    double d = i / 100000.0;
    System.out.println(d);

打印2.29999

    double o = 2.3;
    double i = o * 100000.0;
    double d = i / 100000.0;
    System.out.println(d);

打印2.3

将int除以double时,java首先将int转换为double,然后进行除法 - 如果是这样,两个代码块应该有效地打印相同的值?

似乎有一些我缺少的IEEE 754浮点精度规范和/或内联的jvm优化

 double i = 2.3 * 100000.0;
 double d = i / 100000.0;

as double d = 2.3*100000.0/100000.0; 有效地取消了分裂并使其成为无操作.

思考?

1 个回答
  • 2.3在IEEE-754 64位二进制浮点中不能完全表示.您的第一个代码序列中发生的事情是:

    源文本2.3将转换为最接近的可表示值,2.29999999999999982236431605997495353221893310546875.

    将其乘以100000的确切数学结果也不能完全表示,因此它舍入到229999.99999999997089616954326629638671875.

    当转换为a时int,转换会截断,产生229999.

    再分为10万轮,产生2.29999000000000020094148567295633256435394287109375.

    打印上面的内容时,Java会将其显示为"2.29999".

    2023-02-05 09:32 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有