2012-02-13 49 views
-1

我需要一種簡單的方法(JAVA)在此模式下舍入歐分:舍入歐分方法

  • 1.00 = 1.00
  • 1.01 = 1.00
  • 1.02 = 1.00
  • 1.03 = 1.05
  • 1.04 = 1.05
  • 1.05 = 1.05
  • 1.06 = 1.05
  • 1.07 = 1.05
  • 1.08 = 1.10
  • 1.09 = 1.10
  • 1.10 = 1.10

誰能幫助我?謝謝。

+5

你有沒有試圖編寫任何代碼? – Aziz 2012-02-13 12:24:35

+3

「任何人都可以幫助我」我們可以幫助您解決您編寫的代碼中的問題,但是SO不是一種代碼編寫服務。請發佈您迄今爲止寫的內容。 – Raedwald 2012-02-13 12:25:35

+0

他不知道如何編寫代碼。我認爲這是一個有效的問題。 – PiTheNumber 2012-02-13 12:30:00

回答

1
double euro = 1.07; 
final double dif = euro % 0.05; 
if (dif > 0.025) { 
    euro += 0.05 - dif; 
} else { 
    euro -= dif; 
} 
+1

使用'double'來存儲金錢是個壞主意。 – Jesper 2012-02-13 12:36:15

+0

爲什麼使用雙重存儲金額是一個壞主意?如果返回錯誤或腐敗數據,您可以發佈代碼嗎?對不起和坦克。 – 2012-02-14 17:54:12

+0

無法正常工作:157.68 - > 157.67999999999998我需要157.68 - > 157.70 – 2012-02-14 18:00:36

0

我不知道正確的Java語法,但是這應該給招:

price = round(price * 100/5)/100 * 5 
2

一般:這是一個壞主意來存儲錢花車/雙打,它只會導致災害。

如果你的號碼保持足夠小,你可以使用存儲分數的整數:100,101,...在你的例子中。如果它們可能會變得太大,則使用BigIntegers或等效。

你可以這樣轉換你想要的方式:減1(分),除以粒度(在這種情況下爲5美分),加1,乘以粒度。

+0

您可以請添加一些參考或理由爲什麼浮動是不好的錢? – PiTheNumber 2012-02-13 12:44:45

+1

當然! http://www.javapractices.com/topic/TopicAction.do?Id=13 – 2012-02-13 12:51:00