System.out.printIn(1.5==1.5f);为什么结果为true?

问题描述

System.out.printIn(1.5==1.5f);为什么结果为true?

System.out.printIn(1.4==1.4f);//结果为false
只要是小数为.5的比较就是true,其他都是false,难道.5的时候就不把他看成double型了么?

解决方案

1.4是double,1.4f是float,运用==比较前会对1.4f转换为double,再比较,这个过程有进制转换误差,因为0.4不能用一个二进制有限小数表示,所以随机可能相等可能不等
1.5肯定是相等的,因为0.5 0.25 0.125... 等转换成二进制可以除尽,所以没有进制转换误差。

解决方案二:

我们可以类比下,比如我们用30进制,计算机用10进制。(实际上计算机用二进制我们用10进制)
那么在30进制下的0.1相当于10进制下的1/30,就是0.033... 你可以设想,我们有两种精度一个是小数点保持4位,那么就是0.0333,再转换为8位就是0.03330000,一个是小数点保持8位的,就是0.03333333,两者比较当然不等。
但是30进制下的0.3,十进制就是0.1,那么4位就是0.1000,8位就是0.1000000,4位的那个转换为8位就是0.10000000,结果比较就是相等的。

解决方案三:

浮点数小数部分是0.5×0+0.25×0+0.125×1+……+0.5×(1 or 0)/n+……表示的, 1.4或其他的数是用这个式子无限逼近表示的, 所以1.5==1.5f 成立 ,其他的数字 1.25 ,1.875 等等都是成立的

解决方案四:

System.out.println((double)1.4f); //1.399999976158142
System.out.println(1.399999976158142==1.4f); //true

System.out.println(1.4==1.4f); // false
System.out.println((double)1.4==1.4f); // false
System.out.println((double)1.4>1.4f); // true
我在机器上跑了下
浮点数小数部分是0.5×0+0.25×0+0.125×1+……+0.5×(1 or 0)/n+……表示的, 1.4或其他的数是用这个式子无限逼近表示的, 所以1.5==1.5f 成立 ,其他的数字 1.25 ,1.875 等等都是成立的

解决方案五:

System.out.println((double)1.4f); //1.399999976158142
System.out.println(1.399999976158142==1.4f); //true

System.out.println(1.4==1.4f); // false
System.out.println((double)1.4==1.4f); // false
System.out.println((double)1.4>1.4f); // true
我在机器上跑了下
浮点数小数部分是0.5×0+0.25×0+0.125×1+……+0.5×(1 or 0)/n+……表示的, 1.4或其他的数是用这个式子无限逼近表示的, 所以1.5==1.5f 成立 ,其他的数字 1.25 ,1.875 等等都是成立的

解决方案六:

 浮点都是不精确的,没法直接比较
 1.5==1.5f是不是相等,看你运气

解决方案七:

Must use JDK 1.5.x or higher to build Openfire
----------------------

时间: 2025-01-31 05:38:16

System.out.printIn(1.5==1.5f);为什么结果为true?的相关文章

【转】Eclipse maven工程 Missing artifact com.sun:tools:jar:1.6.0:system 解决方法

解决方案一:通过maven取运行时参数,eclipse提供的环境变量,基本类似System.getProperty("java.home") <dependency>           <groupId>com.sun</groupId>           <artifactId>tools</artifactId>           <version>1.5.0</version>      

Web.config设置system.webServer

一般情况在iis部署web网站都非常顺利,但是遇到复杂环境,或者被配置过又正在使用的时候,就束手无策了, 因为对IIS和Web.config不熟悉,不知其中要害,导致浪费一天甚至更久的时间去处理一个可能是不起眼的配置问题 本文主要和大家共同探讨下Web.config的system.webServer节点配置,如有错误之处,劳烦指点下 环境:IIS 7.0及以上 一.总览 system.WebServer 是 configuration 节的子级.有关更多信息,请参见 IIS 7.0: syste

JavaBeans和关系数据库的镜像

摘要 JDK1.1包括了新的数据库存 取(JDBC)及组件(JavaBeans)的应用程序接口(APIs).这两个API结合在一起,可用来开发通用 数据库代码.通过用唯一的一个类去存取任何一种JDBC数据库(封装于不同组件中的各个应用 程序有着其具体的编码),用户就不必因为数据库结构一点点的细小变化去修改数据库编码. 一个关系数据库基本上包括一系 列相互关连的表,在每一个表中存有一类与应用系统相关的数据.例如一个地址簿数据库中,可 能有关于人员.住址.电话号码等方面的表.在数据库中,每一个这样的

设计模式之SOLID原则再回首

    本科阶段学过设计模式,那时对设计模式的五大原则--SOLID原则的概念与理解还是比较模糊,此时过去了2年时间,在学习<高级软件工程>课程中老师又提到了设计模式,课程中还详细讨论了五大原则的过程,这次SOLID原则再回首作者提出了一些更通俗的理解吧~ 一. 什么是设计模式?     那么,什么是设计模式呢?     从广义角度讲设计模式是可解决一类软件问题并能重复使用的设计方案;     从狭义角度讲设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,是在类和对象的

java-Java编程 如何调适 请大神指导

问题描述 Java编程 如何调适 请大神指导 // 2.某人参加比赛,依次输入10局得成绩,计算达到80分之上的比率, // 该比率如果大于0.8则显示"恭喜,通过一级",否则如果大于0.7则显示"恭喜, // 通过二级",否则显示"加油了!" 解决方案 int num = 10; int count = 0; for (int i = 0; i < num; i++) { Scanner scanner = new Scanner(Sys

设计模式六大原则——单一职责原则(SRP)

      定义       就一个类而言,应该仅有一个引起它变化的原因.通俗的说,一个类只负责一项职责.       问题的由来       手机的功能多,但是每一项的功能都不强:       拍摄功能-->专业的摄像机和照相机       手机游戏-->PSP       网络摄像头-->专业摄像头       GPS功能-->专业GPS导航系统       每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化,如果一个类的承担的职责多于一个,那么引起她变化的原因就

C# 用户控件的Load事件不能执行

问题描述 C# 用户控件的Load事件不能执行 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System

在android中实现类似uc和墨迹天气的左右拖动效果_Android

复制代码 代码如下: import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import a

在android中实现类似uc和墨迹天气的左右拖动效果

复制代码 代码如下: import android.app.Activity; import android.os.Bundle; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import a