java - Java解释器浮点常量的默认数据类型

标签 java floating-point interpreter

这对所有人来说可能都是一个简单的问题,但它却让我的头脑变得困惑,“为什么会这样?”

正如您在下面的代码中看到的,我声明了一个 float 变量并为其分配了一个值。当这段代码被编译和解释时,我会得到一个错误,因为可能会丢失精度,这是正确的,因为java解释器的 float 常量的默认数据类型是double。

查询1:我想知道,当我的 float 常量可以容纳 float 提供的字节数时,为什么我要在应用程序中浪费内存来使用 double 。

查询 2: 现在,如果我指定 float a = 3.1415f ; 我将获得输出,但现在为我的 a 分配了多少内存 变量。

float a = 3.1415 ;
System.out.println("Value of a:"+a);

我真的很想了解这个黑客,为什么会这样?

最佳答案

Query 1 : I wonder, why should I waste memory in my application for double when my floating constant can accommodate in number of bytes float provide.

这只是浮点文字默认为double的问题。来自 section 3.10.2 of the JLS :

A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d (§4.2.3).

您需要决定所需的类型,并编写适当的文字。几乎可以肯定,您不应该根据指定的位数来选择数据类型 - 并且要注意,仅仅因为 float 可以保持一定数量的小数位精度并不意味着它可以准确地表示具有那么多有效数字的数字。例如,没有任何二进制浮点类型可以精确表示 0.1,就像您不能将“三分之一”写为有限十进制数一样。

作为旁注,我个人喜欢为 double 显式添加 d,只是为了清楚起见。

下一个:

Query 2: Now if I specify float a = 3.1415f ; I will get the output but now how much memory is allocated for my a variable.

4 个字节,因为它是一个 float

关于java - Java解释器浮点常量的默认数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18381530/

相关文章:

java - 如何获取下一个浮点值(向上或向下)?

module - Lua 全局变量包含当前文件的路径?

Java SQL 错误 1064

java - 无法正确迭代 jasonArray 并且出现错误

c++ - 使用向上(或向下)舍入将 long double 转换为 double

debugging - 方案和Smalltalk

python - pycharm中远程解释器导入错误

java - 压缩数组

java - 如何将数字转换为单词错误输出为十万而不是千

python - 是否可以使用 NumPy 或 Python 中的其他包获取 double 二进制浮点的保留特殊数字