当我尝试将 double 转换为 int 时。我的变量“检查”始终等于零。但如果我在 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) {
您可能还需要考虑在肯定情况下是否需要 >=
。
或者只使用Math.round()
Sourabh Bhat 的评论也是正确的:你正在重新发明轮子。 Math.round() 已经完成了舍入方法正在执行的工作。因此,如果您将其编码为练习,那么好吧,您正在学习,这总是好的。对于生产代码,您应该更喜欢使用现有的内置库方法。
int rounded = Math.toIntExact(Math.round(-23.6));
System.out.println("Rounded: " + rounded);
Rounded: -24
关于Java double 错误转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55431403/