簡體   English   中英

數學方程如何在Java中工作?

[英]How do math equations work in Java?

當我做這樣的事情

int test = 5 + 3 * (4 - 1) / 2;

我得到9.我懷疑這是因為int舍入。 但是,當我這樣做

float test = 5 + 3 * (4 - 1) / 2;

我也得到9.然而,當我這樣做

float test1 = 5;
float test2 = 4.5;
float test = test1 + test2;

測試最終輸出9.5。 有人可以解釋這背后的邏輯嗎? 為什么我在第二個例子中得不到9.5? 謝謝。

在第二個示例中,雖然您結果分配給 float類型的變量,但計算本身的執行方式仍與第一個示例完全相同。 Java不會查看目標變量類型來確定如何計算右側。 特別是,子表達式3 * (4 - 1) / 2導致4

要解決此問題,您可以使用浮點文字而不是所有整數:

float test = 5 + 3 * (4 - 1) / 2.0f;

使用2.0f會觸發算術表達式的浮點計算。

雖然表示的結果5 + 3 * (4 - 1) / 2在浮法中,實際的評價與的整數的精度完成,這意味着划分9 / 2返回4,而不是4.5你將得到如果他們被評估為浮動。

表達式有自己的類型。 所以從以下開始:

5 + 3 * (4 - 1) / 2

每個值都有自己的類型。 這種類型恰好是int ,所以這與:

((int)5) + ((int)3) * (((int)4) - ((int)1)) / ((int)2)

讓我們更清楚地了解我們正在處理的問題。 只有在將其評估為9后才會將其分配給浮點數。

簡短的回答是整數類型在模運算上運行,模數為1,並丟棄余數。

由於您將test為整數,因此模數運算采用模數1(例如9.5 mod 1),int test = 5 + 3 *(4 - 1)/ 2;

使用32位或64位浮點數,這將得到9.5; 但是,因為您將testint ,所以余數將被丟棄, test引用的值為9。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM