java - 精度损失 - int -> float 或 double

标签 java floating-point double precision

我有一道考试题要复习,题目是 4 分。

"In java we can assign a int to a double or a float". Will this ever lose information and why?

我之所以这么说是因为整数通常是固定长度或大小的——存储数据的精度是有限的,而以 float 存储信息可以是无限的,本质上我们会因此而丢失信息

现在我有点粗略地知道我是否在这里击中了正确的区域。我很确定它会失去精确度,但我无法确切说明原因。请问我能得到一些帮助吗?

最佳答案

在 Java 中,整数使用 32 位来表示它的值。

在 Java 中,FLOAT 使用 23 位尾数,因此大于 2^23 的整数将被截断其最低有效位。例如 33554435(或 0x200003)将被截断为大约 33554432 +/- 4

在 Java 中,DOUBLE 使用 52 位尾数,因此能够表示 32 位整数而不会丢失数据。

参见维基百科上的“Floating Point

关于java - 精度损失 - int -> float 或 double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2781086/

相关文章:

java - 无法将 double 转换为 double [] 错误

java - 无论如何,有没有办法在 spring mvc 中调用没有 .html 扩展名的rest api

java - 如何在 Java 中处理 float 的精度错误?

MySQL返回与搜索条件不匹配的多行

java - 12.1 可以精确地表示为一个 float 吗?

java - 双重运算的错误输出

C++ 和 C++11 类静态成员,double 应该使用 "constexpr"而 int 可以是 "const",为什么?

java - 字符串到十六进制值

java - 为什么我无法重新分配传递给静态方法的 LinkedList 引用?

java - 如何使用 xpath 从特定站点获取值并将其存储在数组中? (安卓)