hell118232 2009-10-11 21:35
浏览 364
已采纳

float 和double的区别

public class Float {

double i=2.0;
double j=1.1;
float m=2.0f;
float n=1.1f;

public void subtract()
{ System.out.println(i-j);
  System.out.println(m-n);
  System.out.print(2.0-1.1);
}

public static void main(String agr[])
{

    Float f=new Float();
    f.subtract();

}

}

行运结果为什么是这样的?
float 和double的区别

0.8999999999999999
0.9
0.8999999999999999

  • 写回答

4条回答 默认 最新

  • iteye_20589 2009-10-12 08:34
    关注

    JAVA解惑一书:
    [quote]public class Change{
    public static void main(String args[]){
    System.out.println(2.00 - 1.10);
    }
    }
    你可能会很天真地期望该程序能够打印出0.90,但是它如何才能知道你想要打
    印小数点后两位小数呢?
    如果你对在Double.toString 文档中所设定的将double 类型的值转换为字符串
    的规则有所了解,你就会知道该程序打印出来的小数,是足以将double 类型的
    值与最靠近它的临近值区分出来的最短的小数,它在小数点之前和之后都至少有
    一位。因此,看起来,该程序应该打印0.9 是合理的。
    这么分析可能显得很合理,但是并不正确。如果你运行该程序,你就会发现它打
    印的是0.8999999999999999
    问题在于1.1 这个数字不能被精确表示成为一个double,因此它被表示成为最
    接近它的double 值。该程序从2 中减去的就是这个值。遗憾的是,这个计算的
    结果并不是最接近0.9 的double 值。表示结果的double 值的最短表示就是你所
    看到的打印出来的那个可恶的数字。
    更一般地说,问题在于并不是所有的小数都可以用二进制浮点数来精确表示的。[/quote]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)