我正在尝试用Java将double转换为无符号int。
对于unsigned int,我的意思是从0到4294967295的范围。
我使用int
作为载波,它可以用Integer.toUnsignedString
转换为String。
我不在乎如果会得到什么结果
- 二重是
NaN
- 替身是
Inf
或-Inf
- 双精度超出范围:
< 0
或> 4294967295
只要我得到任何结果。
简单的铸造不起作用:
(int) 4294967295d == 2147483647
(int) 2147483648d == 2147483647
所以有问题的范围是2147483648d
-4294967295d
。
有没有一种快速的方法来正确覆盖这个范围?
tl;dr:在C中,我会使用(unsigned int) dblValue
——在Java中我会使用什么?
4294967295f
这不是一件事。该浮动不存在。它变圆了。不要使用浮子,它们几乎没有意义。它是替身。
有没有一种快速的方法可以正确覆盖这个范围?
一旦你意识到你的问题毫无意义,就改为双打,是的。强制转换为长,强制转换为int:
double d = 4294967295.0;
int i = (int) (long) d;
System.out.println(i);
System.out.println(Integer.toUnsignedString(i));
> -1
> 4294967295