在Java中将双精度转换为无符号整数



我正在尝试用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

相关内容

最新更新