java - 我初始化变量 : float f = 100; or float f = 100f? 的方式有区别吗

标签 java floating-point

Java。

我初始化变量的方式有区别吗:

float f = 100; //implies a cast from integer to float

float f = 100f; //simply a float initialization

结果可以不同吗?

在这里,我尝试使用非常大的 float 来做到这一点,但看起来精度损失是一样的。

float f1 = (float)2000000000;
float f2 = (float)2000000050;
float f3 = 2000000000f;
float f4 = 2000000050f;
System.out.println(f1 + " " + f2 + " " + (f1==f2) + " " + f3 + " " + f4 + " "+ (f3==f4) );

-> 2.0E9 2.0E9 真 2.0E9 2.0E9 真

double 有什么区别吗?

最佳答案

我想结果会是一样的。 JLS 解释浮点字面量的规则是指 FloatDouble 类型的 valueOf(String s) 方法; JLS 5.1.2 给出了从整数类型到浮点类型的类型转换规则。两者都指的是“IEEE 754 round-to-nearest mode”。所以我认为假设结果相同是安全的。

关于java - 我初始化变量 : float f = 100; or float f = 100f? 的方式有区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571421/

相关文章:

parsing - 编译器解析精确 float

Java连续GC,ParOldGen耗尽

java - 将 HTML/CSS 设计的网站模板迁移到 google web 工具包?

c++ - 在浮点值 C++ 中存储整数除法

Python 的四舍五入问题

math - float 学有问题吗?

java - 尝试通过改造解析 JSON Feed 时出现 IllegalStateException

java - HTTP 状态 500 – 内部服务器错误(Java、Eclipse、Servlets、Tomcat)

java - 不幸的是,与服务器的连接出现错误

c - 什么浮点值使 sprintf_s() 产生 "1.#QO"?