【问题标题】:Why Java is rounding my float calculation?为什么 Java 会舍入我的浮点计算?
【发布时间】:2020-04-02 09:10:10
【问题描述】:

我是 Java 新手,我正在学习第一步。

在做作业时,我在打印带有浮点数的总数时遇到问题:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, Francesco");
        int myFirstNumber = (10 + 5) + (2 * 10);
        int mySecondNumber = 12;
        int myThirdNumber = myFirstNumber * 2;
        int myTotal = myFirstNumber + mySecondNumber + myThirdNumber;
        float  myLastOne = myTotal/10;
        System.out.println(myTotal);
        System.out.println(myLastOne);
    }
}

Java 打印的是11.0

Hello, Francesco
117
11.0

但它应该打印11.7

Hello, Francesco
117
11.7

我知道问题出在我使用 float 的第 8 行,我什至尝试使用 double,但结果相同

【问题讨论】:

  • 将一个值除以一个 int 返回一个 int。而是使用:float myLastOne = myTotal/10.0;

标签: java floating-point int double println


【解决方案1】:

这是因为int-division 因为10int。您需要添加后缀 f 以指定它是一个浮点数

float myLastOne = myTotal / 10f;
System.out.println(myLastOne); // 11.7

这也适用于double

double myLastOne = myTotal / 10.0;
System.out.println(myLastOne); // 11.7

【讨论】:

    【解决方案2】:

    你的问题是针对陈述的

    float  myLastOne = myTotal/10;
    

    如果myLastOne,为什么不做浮点除法,而是截断除法的结果。

    原因是尽管变量myLastOne 是一个浮点数,但该行代码首先计算表达式myTotal/10。由于myTotal10 是整数,所以它使用整数除法。这会产生整数结果11,然后将其存储在myLastOne float 变量中,并转换为11.0

    要让 Java 使用浮点除法,这是您想要的,myTotal 或您要除以的数字需要是浮点数。

    float  myLastOne = (float)myTotal/10;
    
    int float = myFirstNumber + mySecondNumber + myThirdNumber;
    float  myLastOne = myTotal/10;
    

    【讨论】:

    • 第二个例子'float myLastOne = myTotal/10.0;'实际上不起作用:“错误:(8, 34)java:不兼容的类型:从双精度到浮点数的可能有损转换”
    • 已编辑。最好使用10f10.0 作为除数,但如果分子是浮点数就足够了。
    【解决方案3】:

    在 Java 中 int / int 使 int。 int * int 使 int。 int + int 使 int。 int - int 生成 int。

    你必须先转换一个 int 来浮动。

    float  myLastOne = (float)myTotal/10;
    

    float  myLastOne = (float)myTotal/10.0;
    

    【讨论】:

    • 浮点除法 int 使浮点数。
    【解决方案4】:

    myTotal10 都是整数,所以 Java 认为它应该进行整数除法。由于结果是整数,11.7 被截断为 11(浮点数为 11.0)。

    要使其输出浮点数(浮点除法),请将至少一个操作数定义为浮点数。

    float myLastOne = (float)myTotal/10;
    float myLastOne = myTotal/10f;
    float myLastOne = (float)myTotal/10f; //All of these work
    

    【讨论】:

      猜你喜欢
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2013-05-17
      相关资源
      最近更新 更多