我总是被告知永远不要代表钱double或float类型,这次我向你提出问题:为什么?
我确信有一个很好的理由,我根本不知道它是什么.
我遇到了以下程序
class Boolean {
public static void main(String argv[]) {
boolean x;
x = 4.4f == 4.4;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
以下程序的输出是 false
但是,如果我们以下列方式编写程序,那么
class Boolean {
public static void main(String argv[]) {
boolean x;
x = 4.5f == 4.5;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下输出是 true
有人可以解释一下为什么吗?
可能重复:
在java中操作和比较浮点数
我是否应该在比较Java中的浮点数时使用Epsilon?Float.compare(float f1,float f2)静态方法是否可以安全使用?
谢谢 !
编辑:我想我明白了.
当我写,比如说,在日食中3.6f,编译器将这个数字解释为3.6.但是,当我写1.2f*3.0f时,结果是3.6000001.虽然在数学上这是错误的,但这两个结果显然是不公平的.因此,在检查相等性时需要有一个epsilon.
但是,当我在eclipse中写入0.0f时,编译器严格地将其解释为0,因为IEEE 754能够正确处理它.因此,确保浮动是严格正的(值> 0.0f)是正确的.
我看到的唯一问题是当计算机不使用IEEE 754表示时,而是使用不能正确处理0的表示.
我对吗 ?
我遇到了这个代码的问题!我试图在java中运行代码,但答案似乎很奇怪.
float a=0.1F;
float b=0.2F;
if((a+b)==0.3){
System.out.println("True");
}
else{
System.out.println("False");
}
Run Code Online (Sandbox Code Playgroud)
答案是:错误但理论上应该返回True.如果我们使用a和b的值,如0.15和0.15或0.05和0.25,则函数返回True.我很迷惑.我读过像Java/JavaScript这样的语言实现IEEE-754数字格式的地方!如果是这样,那么这种格式是什么以及代码有什么问题?反正有没有改变数字格式?
我尝试使用此xml为具有双数据类型的hibernate分配ID
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="User" table="user">
<id name="id" type="double" >
<column name="id_user" />
<generator class="increment" />
</id>
<property name="username" />
<property name="password" />
<property name="email" />
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
但它给了我错误
org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.Double
at org.hibernate.id.IdentifierGeneratorHelper.getIntegralDataTypeHolder(IdentifierGeneratorHelper.java:210) at org.hibernate.id.IdentifierGeneratorHelper.getIntegralDataTypeHolder(IdentifierGeneratorHelper.java:210)
Run Code Online (Sandbox Code Playgroud)
我的代码出了什么问题?或者它是一个Hibernate错误还是什么?
有人可以在java中解释我为什么
if(0.6 <= 0.6f ) System.out.printf("true");
else System.out.printf("false");
Run Code Online (Sandbox Code Playgroud)
这个PRINTS是真的但是
if(0.7 <= 0.7f ) System.out.printf("true");
else System.out.printf("false");
Run Code Online (Sandbox Code Playgroud)
这个PRINTS是假的
当浮点数转换为双倍进行比较时,它是否与IEEE 754标准有关?
有人可以详细解释它的确切工作吗?
我正在调试我的程序,其中某些双打和浮动不相等.我在此之前已经找到了答案,为什么会发生这种情况但却找不到相关信息.例如:
System.out.println(4.4f == 4.4);
Run Code Online (Sandbox Code Playgroud)
这打印错误,
System.out.println(4.5f == 4.5);
Run Code Online (Sandbox Code Playgroud)
打印真实.
有人可以解释为什么JAVA会出现这种情况吗?