zoukankan      html  css  js  c++  java
  • 关于 System.out.println(1-0.1*9); 问题

    来源:http://www.iteye.com/problems/69889

     

    首先 
    2进制无法精确显示0.1 

    0.1 用ieee的浮点数标准怎么表示?

    后52个字节是小数,第一个字节是符号,后面11个字节是阶码。

    2的负几次方的和加到一起是0.1? 答案是没有。

    试一下 2.0-0.5这样的,算出来就是精确的了。

    因为0.5是2的-1次方。0.75这样的 2(-1)+2(-2)都是可以精确表示的....

    如果你想让2.0-0.1准确的话,用bigdecimal来做即可。 


    编译器在处理一个数据时,当一种类型数据无法用二进制数精确表示时,只能按照一种规则去找一个数代替(比如取最接近这个数的二进制数代替)


    如果想让他精确可以这样 

    Java代码

    System.out.printf("%.1f",2.0-1.1);    



    或者 

    Java代码

    BigDecimal a = new BigDecimal("2.0").subtract(new BigDecimal("1.1"));  

    System.out.println(a);

  • 相关阅读:
    列表 元组
    前端 3
    前端 2
    python pymysql 表和数据的备份
    python 树 索引
    python 数据库连表查询习题
    python 数据库表查询
    python 数据库usdr 查询
    python set enum 完整性约束
    python 数据库表操作
  • 原文地址:https://www.cnblogs.com/6luv-ml/p/6560983.html
Copyright © 2011-2022 走看看