在Java中向下舍入浮点转换

我的代码中有一行代码如下:

float rand = (float) Math.random();

Math.random()返回一个> = 0.0和< 1.0的double.不幸的是,如果double太接近1.0,则上面的强制转换可能会将rand设置为1.0f. 有没有办法将double转换为浮点数,以便在找不到完全相等的值时,它总是向下舍入到下一个浮点值而不是最接近的浮点值? 我不是在寻找有关RN​​G的建议,也不是在寻找if(rand == 1.0f)rand = 0.0f;等后续工作.在我的情况下,该解决方案是解决我的问题的一种令人满意的方式,它已经实现.我只是想找到这种数字转换的“正确”解决方案.

最佳答案 如果你只想在rand == 1.0f时舍入,那么我第二个@paxdiablo的回答.但是,听起来好像你总是四舍五入,只想总是向下舍入.如果是这样:

float rand = Math.nextDown((float)Math.random());

来自javadoc:

nextDown(float f)
Returns the floating-point value adjacent to f in the direction of negative infinity.

回应你的评论 – 好点.为了避免这个问题,你可以简单地将语句包装在对Math.abs()的调用中,除非nextDown()的结果是否定的,否则它将没有任何影响.

float rand = Math.abs(Math.nextDown((float)Math.random()));
点赞