Java 可变数字文字
Java Variable Numeric Literals
我是 java 的新人。我对数字文字有疑问。这是我的问题:
float rank = 1050.86F;
System.out.println(rank);
输出为:1050.86
double rank1 = 1050.86D;
double rank2 = 1050.86F;
System.out.println(rank1);
System.out.println(rank2);
rank1的输出为:1050.86
rank2的输出为:1050.8599853515625
我的问题是:
(i)为什么rank1和rank2的输出不一样?我是如何计算的?
(ii) 为什么我需要在分号前使用L、D、F?既然我们已经使用了关键字 double, int,那么为什么我们还需要在变量上使用 L、D、F?
请帮助我。我是编程新手。
要回答您的第一个问题,它与计算机内部存储数字的方式有关。计算机使用 floating point 来存储数字。双精度(“double”)在每个数字中存储的“信息”比浮点数多。 double 存储 64 位,float 存储 32 位。看到 64 位数是 32 位数的两倍了吗?这就是为什么它被称为双打!
不过,双精度数和浮点数都只能在其类型中存储有限数量的信息,因此它们并不十分精确,您可以预料到在编程中经常会出现这样的小错误。不用担心,事实上 运行 像您描述的那样出现浮点错误是很常见的。如果您想要更精确的十进制值,除了应该使用双打之外没有其他解决方案。解释如何处理浮点错误需要大量解释,所以我将 link 我最喜欢的解释之一 here。
要回答你的第二个问题,如果你没有指定,Java 将假设你使用的是双精度值(参见 here),所以你必须指定你想要一个浮动。这是因为大多数时候你会想要使用双精度数(就像我上面说的,它存储更多信息),所以默认双精度数是有道理的,你必须指定是否需要浮点数。
我是 java 的新人。我对数字文字有疑问。这是我的问题:
float rank = 1050.86F;
System.out.println(rank);
输出为:1050.86
double rank1 = 1050.86D;
double rank2 = 1050.86F;
System.out.println(rank1);
System.out.println(rank2);
rank1的输出为:1050.86
rank2的输出为:1050.8599853515625
我的问题是:
(i)为什么rank1和rank2的输出不一样?我是如何计算的?
(ii) 为什么我需要在分号前使用L、D、F?既然我们已经使用了关键字 double, int,那么为什么我们还需要在变量上使用 L、D、F?
请帮助我。我是编程新手。
要回答您的第一个问题,它与计算机内部存储数字的方式有关。计算机使用 floating point 来存储数字。双精度(“double”)在每个数字中存储的“信息”比浮点数多。 double 存储 64 位,float 存储 32 位。看到 64 位数是 32 位数的两倍了吗?这就是为什么它被称为双打!
不过,双精度数和浮点数都只能在其类型中存储有限数量的信息,因此它们并不十分精确,您可以预料到在编程中经常会出现这样的小错误。不用担心,事实上 运行 像您描述的那样出现浮点错误是很常见的。如果您想要更精确的十进制值,除了应该使用双打之外没有其他解决方案。解释如何处理浮点错误需要大量解释,所以我将 link 我最喜欢的解释之一 here。
要回答你的第二个问题,如果你没有指定,Java 将假设你使用的是双精度值(参见 here),所以你必须指定你想要一个浮动。这是因为大多数时候你会想要使用双精度数(就像我上面说的,它存储更多信息),所以默认双精度数是有道理的,你必须指定是否需要浮点数。