簡體   English   中英

Java數學邏輯錯誤

[英]Java math logic error

我的項目中包含以下代碼:

  int percent = 2;
  int count = 10;
  int percentagefill = (percent/10)*count; 
  System.out.println(percentagefill);

基本上發生的是,我設置了兩個變量,百分比和計數。 然后,我計算百分比填充。 出於某種奇怪的原因,百分比填充導致結果為0,在這種情況下應為2。 提前致謝。

int除以int仍將int 在這種情況下:

(percent/10)*count
= (2/10)*10
= (0) * 10 <-- 0.2 is rounded down to 0
= 0

您可以閱讀此問題以供參考。 另外,這是Java規范 ,其中整數整數被舍入為0。至於解決方法,只要浮點精度不成為問題 ,就可以像PaulP.RO所說的那樣使用double

您可以將其除以10.0 ,或將int percent更改為double percent ,以強制將轉換轉換為double 否則,您將獲得整數除法,該除法將舍去小數部分。

這是一個相關的問題: “ Java整數部分,您如何產生一個double ?”

如果您確實需要將結果設為int ,則可以在除法之前進行乘法運算,以避免整數除法為零。

int percentagefill = (percent*count)/10;

更改此行:

int percentagefill = (percent/10)*count; 

至:

double percentagefill = (percent/10.0)*count;

這將使用浮點算術(因為是10.0而不是10),並將結果存儲在double (與int不同,其精度超過了小數點)。

正如其他人提到的那樣,整數除法會損失精度

解決方案取決於您的需要:如果您的結果仍然需要為整數,請先乘以:

int percentagefill = (percent*count)/10;

可能對您“足夠好”(您將獲得正確的答案四舍五入)。

如果需要獲得分數答案,則需要將其轉換為浮點類型:

double percentagefill = (percent/10.0)*count;
//                                 ^ the .0 makes this a double,
//                                forcing the division to be a
//                                floating-point operation.

很容易解決:

  int percent = 2;
  int count = 10;
  double percentagefill = (percent/10.0)*count; 
  System.out.println(percentagefill);

戴夫牛頓,您的答案應該是答案。 :)

整數2 /整數10 =0。整數0 *整數10 = 0。

您將需要一個float或double 數據類型 在處理信息時,始終要讓解釋器做出數據類型假設和“轉換”的機會感到厭倦。 一個例子就是println接受一個intefer並轉換為字符串進行顯示。

我的大部分工作是在php中進行的,當使用值時,0,NULL,ERROR可能都是不同的東西,並且會產生意想不到的結果。 有時,您可能需要將變量顯式轉換為其他數據類型才能獲得預期的結果。

之所以如此,是因為您在應使用浮點數據類型(例如double)時使用整數數據類型。 此代碼應為2.0:

double percent = 2;
double count = 10;
double percentagefill = (percent/10)*count; 
System.out.println(percentagefill);

暫無
暫無

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

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