当我尝试将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个。
答案 0 :(得分:2)
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