Java双精度错误转换为int

时间:2019-03-30 12:25:08

标签: java casting

当我尝试将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个。

1 个答案:

答案 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) {

您可能还想考虑在肯定的情况下是否想要>=

或仅使用Math.round()

Sourabh Bhat在评论中也正确:您正在重新发明轮子。 Math.round()已经完成了舍入方法的工作。因此,如果您将此编码为一项练习,那么很好,您正在学习,那总是很好。对于生产代码,您应该更喜欢使用现有的内置库方法。

    int rounded = Math.toIntExact(Math.round(-23.6));
    System.out.println("Rounded: " + rounded);
  

圆角:-24