我有一個problema這個選擇:Mysql。整函數沒有給出正確的價值
select @a := 992.7500, ROUND(@a * (1 + 18/100), 2) AS Total;
佔總它獲得1171.44,但其值必須是1171.45。如果執行Workbench並且我再次運行相同的選擇,它會得到正確的值。
¿我如何才能獲得正確的價值?謝謝。
我有一個problema這個選擇:Mysql。整函數沒有給出正確的價值
select @a := 992.7500, ROUND(@a * (1 + 18/100), 2) AS Total;
佔總它獲得1171.44,但其值必須是1171.45。如果執行Workbench並且我再次運行相同的選擇,它會得到正確的值。
¿我如何才能獲得正確的價值?謝謝。
那是的正確值。它只是根據spec使用銀行家的舍入。
ROUND()使用以下規則取決於第一參數的類型:
對於準確值的數字,ROUND()使用「舍入半遠離零」 或「向最近「規則:小數部分爲.5或更大的值會被舍入到下一個整數(如果爲正數),或者下一個整數(如果爲負數)則舍入到下一個整數。 (換句話說,它是從 零圓整)。小數部分小於.5的值向下舍入爲 ,如果爲正則爲下一個整數,如果爲負值,則小於下一個整數。
對於近似值數字,結果取決於C庫。在 許多系統中,這意味着ROUND()使用「到最近的偶數」規則: 規則:具有任何小數部分的值將四捨五入到最接近的整數 整數。
銀行家舍入,或「舍入到最接近的偶數」是用於像double
不精確數值優選舍入方法,因爲它解決了替代的向上偏壓。
銀行家舍入爲舍入到的量的整數,其中 數中從兩個最近的整數 等距離被舍入到最接近的偶數整數的算法。因此,0.5回合到0; 1.5輪可達2.
好的。但爲什麼同一句話給出了不同的結果?試試看吧。運行這個句子,當在屏幕上看到結果時,再次運行。謝謝。 – Pols63
好的。我明白。沒有更多的問題。非常感謝。 – Pols63
如何在第一次運行時獲得該查詢的權利? – Pols63