当前位置: 首页 > 面试题库 >

必须为长号指定L,为浮点型,双精度时指定F,D的原因

狄晟睿
2023-03-14
问题内容

这里有一些相关的问题。

按照标题,如果我们将变量类型指定为long或float,double,为什么要这样做?编译器不是在编译时评估变量类型吗?

Java将所有整数文字视为int-这是否是为了减轻无意的内存浪费的打击?并且所有浮点文字都为double-以确保最高的精度?


问题答案:

当您拥有一个常数时,值之间会存在细微的差异,这些差异看起来相同,但并非相同。此外,由于引入了自动装箱,因此您获得的结果将有所不同。

考虑一下如果将0.1乘以0.1作为浮点数或双精度数并转换为浮点数会得到什么。

float a = (float) (0.1 * 0.1);
float b = 0.1f * 0.1f;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

版画

a= 0.00999999977648258209228515625
b= 0.010000000707805156707763671875
a == b is false

现在比较使用floatint执行计算得到的结果。

float a = 33333333f - 11111111f;
float b = 33333333 - 11111111;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

版画

a= 22222220
b= 22222222
a == b is false

比较intlong

long a = 33333333 * 11111111; // overflows
long b = 33333333L * 11111111L;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

版画

a= -1846840301
b= 370370362962963
a == b is false

比较doublelong

double a = 333333333333333333L  / 333333333L;
double b = 333333333333333333D  / 333333333D;
System.out.println("a= "+new BigDecimal(a));
System.out.println("b= "+new BigDecimal(b));
System.out.println("a == b is " + (a == b));

版画

a= 1000000001
b= 1000000000.99999988079071044921875
a == b is false

总之其可能构造的情况下使用intlongdoublefloat与使用另一种类型相比,将产生不同的结果。



 类似资料:
  • 本文向大家介绍在C#中将指定的双精度浮点数转换为64位带符号整数,包括了在C#中将指定的双精度浮点数转换为64位带符号整数的使用技巧和注意事项,需要的朋友参考一下 要将指定的双精度浮点数转换为64位带符号整数,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 问题内容: 为什么需要f在浮点文字中指定后缀? 问题答案: 它默认为double,这是比更加常用的浮点类型float。 根据Java语言规范的第3.10.2节: 如果浮点文字后缀为ASCII字母F或f,则其类型为float。否则,其类型为double,并且可以选择在其后缀ASCII字母D或d(第4.2.3节)。 (我个人希望在所有情况下都没有默认值,但这是另一回事。)

  • 我是阿帕奇骆驼的新手。我正试图将头和请求体一起发送到Apache Camel中的路由。 我得到以下错误:

  • 在C++中如何将浮点数转换为字符串,同时指定精度&小数位数? 例如:

  • 问题内容: 是否有比浮点精度更好的数据类型? 问题答案: 小数数据类型 与基于硬件的二进制浮点数不同,十进制模块具有用户可更改的精度(默认为28位),可以与给定问题所需的精度一样大。 如果您对性能问题感到困扰,请查看GMPY

  • 问题内容: 我有这个问题,我必须将公里转换成英里。我是一个新手程序员,所以请耐心等待。 到目前为止,这是我的代码: 它给我一个错误,说: 问题答案: 您正在尝试将a 设置为变量 要修复,请更改此行 至