在下面的go代码片段中,我难以理解为什么结果不同:
func main() {
a := -0.2; b := -0.1;
fmt.Println(a+b)
//Outputs expected float value with rounding error : -0.30000000000000004
c := (-0.2)+(-0.1)
fmt.Println(c)
//Will ouput -0.3 (the actual exact constant).
}
到底发生了什么,当不使用这些常量实例化float时,会以某种方式将c操作作为常量而不是float64操作执行吗? 完整的工作版本:https://play.golang.org/p/kUICDGFiMvf
感谢您提供任何见解。
答案 0 :(得分:-2)
我尝试使用Java,结果是
public class StringTest {
public static void main(String[] args) {
double a = -0.2;
double b = -0.1;
System.out.println(a + b);
// -0.30000000000000004
double c = a + b;
System.out.println(c);
// -0.30000000000000004
}
}
似乎任何使用二进制浮点数的编程语言都会出现此问题。某些语言的Number类型使用IEEE754标准来表示数字。 什么是IEEE-745浮动,您可以看到it。