在 Java 中将双精度数转换为无符号整数
Convert double to unsigned integer in Java
我正在尝试将 Java 中的 double 转换为 unsigned int。
对于 unsigned int,我指的是从 0 到 4294967295 的范围。
我使用 int
作为载体 - 它可以用 Integer.toUnsignedString
.
转换为字符串
如果
我不在乎我得到什么结果
- 加倍是
NaN
。
- 加倍是
Inf
或-Inf
- 双精度值超出范围:
< 0
或 > 4294967295
。
只要我得到任何结果。
简单的转换不起作用:
(int) 4294967295d == 2147483647
(int) 2147483648d == 2147483647
所以有问题的范围是2147483648d
- 4294967295d
.
有没有正确覆盖该范围的快速方法?
tl;dr:在 C 中我会使用 (unsigned int) dblValue
- 我会在 Java 中使用什么?
4294967295f
那不是一回事。那个浮动不存在。它变圆了。不要使用花车,它们几乎没有意义。它作为一个双。
Is there a fast way to cover that range correctly?
一旦你意识到你的问题毫无意义并转向双打,是的。转换为 long,转换为 int:
double d = 4294967295.0;
int i = (int) (long) d;
System.out.println(i);
System.out.println(Integer.toUnsignedString(i));
> -1
> 4294967295
我正在尝试将 Java 中的 double 转换为 unsigned int。
对于 unsigned int,我指的是从 0 到 4294967295 的范围。
我使用 int
作为载体 - 它可以用 Integer.toUnsignedString
.
如果
我不在乎我得到什么结果- 加倍是
NaN
。 - 加倍是
Inf
或-Inf
- 双精度值超出范围:
< 0
或> 4294967295
。
只要我得到任何结果。
简单的转换不起作用:
(int) 4294967295d == 2147483647
(int) 2147483648d == 2147483647
所以有问题的范围是2147483648d
- 4294967295d
.
有没有正确覆盖该范围的快速方法?
tl;dr:在 C 中我会使用 (unsigned int) dblValue
- 我会在 Java 中使用什么?
4294967295f
那不是一回事。那个浮动不存在。它变圆了。不要使用花车,它们几乎没有意义。它作为一个双。
Is there a fast way to cover that range correctly?
一旦你意识到你的问题毫无意义并转向双打,是的。转换为 long,转换为 int:
double d = 4294967295.0;
int i = (int) (long) d;
System.out.println(i);
System.out.println(Integer.toUnsignedString(i));
> -1
> 4294967295