【发布时间】:2019-05-16 15:10:28
【问题描述】:
从 double 到 float 的转换是否基于大小(十进制范围)? 一开始我是这么想的,但是指数部分让我很困惑.. 那么是什么规则来管理这种转换
第二,浮点数转整数的规则是刚刚取出来的 分数部分?意思是 12.5 * 10^-6 将评估为零?
编辑:
我会用另一种更精确的形式来写我的问题:
java中将double转换为float的二进制级规则是什么 (即缩小转换过程中的符号、尾数、指数操作)
这些二进制规则是否对应于十进制规则(人类可读),以便 结果可以根据源(双)值来预测吗?
在将任一浮动类型规则转换为 整数类型?
谢谢
【问题讨论】:
-
我不确定您所说的“管理该转换”和“管理缩小转换的规则”是什么意思。这种词的组合对我来说没有意义。您是在问 Java 如何从 double 转换为 float 以及从 float 转换为 int 吗?
-
是的,例如,如果我们将浮点数转换为整数,小数部分将被删除,整数部分将被转换为 long 或 int,无论是保持 int 还是截断最高有效位留下一个不需要原始数字的数字,但是从双精度到浮点如何在二进制级别上完成(ieee 754尾数指数符号)可以为我说明这个想法并消除混淆
-
double 到 float 在二进制级别上的转换相当简单:保留符号,将用作指数的
signed int 11转换为signed int 8并丢弃尾数的最后 29 位(如有必要,四舍五入) .结果,您已将双精度的 1+11+52 位转换为浮点数的 1+8+23 位。 -
等待@Poohl ....你在我脑海中提出了一个亮点...我现在可以修改我一开始无法准确写出的问题...结果可以预测?我可以根据原始值预测会产生什么值吗?...或者二进制操作不符合十进制人类可读规则? .. 我会编辑原帖
-
@Poohl 是的,但这就是 Java 所做的......?我不知道 Java 是如何进行这两种转换的。只是希望澄清所提出的问题。 @AbdAllah 您可以尝试查看
Float.valueOf(double)的代码(我猜它的名称,应该是这样的)
标签: java casting floating-point type-conversion narrowing