【问题标题】:Loss of precision in javajava中的精度损失
【发布时间】:2015-07-06 05:40:25
【问题描述】:

所有整数字面量在 java 中都被视为 int,而浮点字面量在 java 中被视为 double。 那为什么

    byte b =10;

没有给出任何错误,但是

   float f = 10.0;

在两种情况下都发生向下转换时会损失精度误差?

【问题讨论】:

标签: java type-conversion


【解决方案1】:

intbyte 的情况下,没有真正担心精度 的损失,因为这两种类型具有相同程度的粒度。如果您尝试将具有在byte范围 之外的值的文字转换为byte。 (在这种情况下给出的错误信息有点误导。)

doublefloat 的情况下,您可以有一个在正确范围内的常数值,但仍然会丢失精度。在您的 10.0 的特定情况下,该值可以在 floatdouble 中精确表示,但一般情况并非如此。

作为一个例子,考虑一下:

float f = (float) 10.1; // Or float f = 10.1f;
double d = 10.1;
System.out.println(f == d); // Prints false

这是因为在从doublefloat 的转换中丢失了精度——这两种类型都不能准确地表示 10.1,但doublefloat 更接近它。 == 运算符意味着f 被转换回double,与d 具有不同的值。

【讨论】:

  • 先生的解释真棒!!我从没想过 10.1 (float) 等于 10.1 (double) 是假的(类型转换后)
猜你喜欢
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
相关资源
最近更新 更多