【发布时间】:2020-12-17 14:19:10
【问题描述】:
这个问题与语言无关,但代码是用 Java 编写的。
我们都听说过比较浮点数是否相等通常是错误的。但是,如果我想比较两个完全相同的文字浮点值(或表示完全相同的文字值转换为浮点数的字符串)怎么办?
我很确定这些数字会完全相等(嗯,因为它们必须在二进制中是相等的——完全相同的东西怎么会导致两个不同的二进制数?!)但我想确定一下。
案例一:
void test1() {
float f1 = 4.7;
float f2 = 4.7;
print(f1 == f2);
}
案例 2:
class Movie {
String rating; // for some reason the type is String
}
void test2() {
movie1.rating = "4.7";
movie2.rating = "4.7";
float f1 = Float.parse(movie1.rating);
float f2 = Float.parse(movie2.rating);
print(f1 == f2);
}
在这两种情况下,表达式f1 == f2 都应该生成true。我对吗?如果 ratings 具有相同的文字浮点或字符串值,我可以安全地比较它们是否相等?
【问题讨论】:
-
“比较浮点数的相等性通常是错误的。”是错误的夸大其词。学习者指南,但不是真理。
标签: java floating-point precision floating-accuracy ieee-754