我正在研究一個縮放系統,將數字縮小25%並四捨五入到最接近的整數,爲此,我試圖依靠損失通過將double轉換爲int來實現精度。有什麼辦法可以解決這個問題嗎?或者我應該以不同的方式去解決它?如何解決在Java中可能的精度錯誤損失
public int[] scaleMarks(int[] marks)
{
double scale = 1.25;
double temp1;
int temp2;
for(int i = 0; i < marks.length; i++)
{
temp1 = marks[i] * scale;
temp2 = marks[i] * scale; //***Loss of precision here***
if(temp1-temp2>= 0.5)
{
temp2++;
}
marks[i] = temp2;
}
return marks;
}
「試圖依靠精度的損失」.....這似乎很危險。 – Mshnik
將一個double投射到一個int將不會舍入到最近的int,它會將其放置。 – shmosel
好吧,我知道它會成爲實際值之下最接近的整數,我將使用兩者之間的差異來確定我應該繞過哪條路,但我認爲我只是將它解決了出來。通過使它 temp2 =(int)(marks [i] * scale); 它似乎編譯,但我目前無法測試它,因爲我的筆記本電腦不允許我運行編譯的文件。 – spar1784