小编vdM*_*ele的帖子

在java中将double转换为整数

在Java中,我想将double转换为整数,我知道如果你这样做:

double x = 1.5;
int y = (int)x;
Run Code Online (Sandbox Code Playgroud)

你得到y = 1.如果你这样做:

int y = (int)Math.round(x);
Run Code Online (Sandbox Code Playgroud)

你可能会得到2.但是,我想知道:因为整数的双重表示有时看起来像1.9999999998或其他东西,是否有可能通过Math.round()创建一个双重表示仍然会导致截断的数字,而不是比我们正在寻找的舍入数字(即代码中代码为1而不是2)?

(是的,我的意思是这样的:x 是否有任何值,其中y将显示一个截断的结果而不是x的圆形表示?)

如果是这样的话:有没有更好的方法将double变为圆形int而不会有截断的风险?


想象一下:Math.round(x)返回一个long,而不是double.因此:Math.round()不可能返回一个看起来像3.9999998的数字.因此,int(Math.round())将永远不需要截断任何内容并始终有效.

java double casting rounding

109
推荐指数
3
解决办法
42万
查看次数

ConcurrentSkipListSet和重新排序(java)

我使用的是ConcurrentSkipListSet,显然是通过多个线程访问的.现在,底层对象的compareTo方法使用的值会随时间发生变化.因此,我想"更新"列表的顺序(通过使用它或类似的东西).

但是,java.util.Collections.sort(list)不起作用,只是重建列表可能太慢了(并且会破坏整个并发性).我应该看看还有其他解决方案吗?

它不必导致最佳排序(无论如何,并发和更改值几乎不可能).只要任何删除/添加调用保持线程证明(在排序时重建列表时这将是一个真正的问题),接近最佳就足够了.

java sorting concurrency list

5
推荐指数
1
解决办法
1495
查看次数

标签 统计

java ×2

casting ×1

concurrency ×1

double ×1

list ×1

rounding ×1

sorting ×1