[英]Java math logic error
我的項目中包含以下代碼:
int percent = 2;
int count = 10;
int percentagefill = (percent/10)*count;
System.out.println(percentagefill);
基本上發生的是,我設置了兩個變量,百分比和計數。 然后,我計算百分比填充。 出於某種奇怪的原因,百分比填充導致結果為0,在這種情況下應為2。 提前致謝。
您可以將其除以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.