繁体   English   中英

Java双精度错误转换为int

[英]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) {

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

或者只是使用Math.round()

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM