Java double 错误转换为 int

标签 java casting

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

相关文章:

java - 表 Laws_Table 没有名为 Category_name 的列(代码 1 SQLITE_ERROR)

java - Selenium 仅选择 WebElement 的直接子级

php - PHP 中 TRUE 和 FALSE 常量定义不一致

php - 将用户输入转换为足以对其进行清理的整数吗?

C++ 从类型 ‘void*’ 到类型 ‘double’ 的无效转换

Java 聚类库

java - 如何在不将方法设为静态的情况下使用@Enclosed

java - java删除如何决定进行哪种强制转换来返回类型?

c - 如何使用 atoi() 将类型转换为 Int32

java - Java 的 lorem ipsum 生成器,在 Maven Central 中可用?