[英]Java double incorrect cast to int
当我尝试将double转换为int时。 我的变量“ check”始终等于零。 但是,如果我在psvm中做到这一点。 如果我在课堂上这样做,检查总是等于零。 我该如何解决这个问题? 我尝试使用Double和Integer进行强制转换,但它也不起作用。
我在Ubuntu 18上使用java 11。
public class Round {
public int round (double value) {
return (value > 0) ? roundPositiveNubmer(value) : roundNegativeNumber(value);
}
private int roundPositiveNubmer(double value) {
int result;
double checkD = value * 10 % 10;
int check = (int) checkD;
if (check > 5) {
value++;
result = (int) value;
} else {
result = (int) value;
}
return result;
}
private int roundNegativeNumber(double value) {
int result;
double checkD = value * 10 % 10;
int check = (int) checkD;
if (check > -5 && check < 0) {
value--;
result = (int) value;
} else {
result = (int) value;
}
return result;
}
}
当我尝试将23.6舍入时。 我有23岁,但必须24岁。
JB Nizet已经在注释中暗示了,您的代码在肯定的情况下效果很好。
麻烦在于否定情况。 round(-23.6)
得出-23,而不是-24。 这是由以下行引起的:
if (check > -5 && check < 0) {
在-23.6的情况下, check
值为-6, 小于 -5。 我想您想要更简单的方法:
if (check < -5) {
现在,-23.6舍入为-24。 -23.5仍舍入为-23。 如果您在这种情况下也想要-24:
if (check <= -5) {
在肯定的情况下,您可能还需要考虑是否要>=
。
Sourabh Bhat的评论也正确:您正在重新发明轮子。 Math.round()
已经完成了舍入方法的工作。 因此,如果您将此编码为练习,那么很好,您正在学习,那总是很好。 对于生产代码,您应该更喜欢使用现有的内置库方法。
int rounded = Math.toIntExact(Math.round(-23.6));
System.out.println("Rounded: " + rounded);
取整:-24
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.