[英]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; 但是,因為您將test
為int
,所以余數將被丟棄, test
引用的值為9。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.