Re: [J2SE] 進行浮點數運算時如何四捨五入至小數第 …
※ 引述《ogamenewbie (._.)》之銘言:
: ※ 引述《thinkniht ()》之銘言:
: : 標題: [J2SE] 進行浮點數運算時如何四捨五入至小數第幾位
: : 時間: Tue Oct 9 09:06:30 2007
: : 在進行數學運算時
: : 如果型態是浮點數的話
: : 如何對運算結果做四捨五入到特定小數位數
: : 例如四捨五入至小數點後第一位、第二位等等
: : 書上我只看到用Math.round四捨五入到整數位數
: : 不知道有沒有別的方法可以四捨五入到小數位數
: : --
: : ◆ From: 218.170.69.229
: : 推 ogamenewbie:numberformat? 10/09 09:41
: : 推 archerlin:import java.math.BigDecimal 詳見 http://0rz.tw/620Oc 10/09 11:09
: : 推 archerlin:BigDecimal b = new BigDecimal(Double.toString(d)); 10/09 11:24
: : → archerlin:d = b.divide(new BigDecimal("1"), scale, 10/09 11:26
: : → archerlin: BigDecimal.ROUND_HALF_UP).doubleValue(); 10/09 11:27
: : → archerlin:類似這樣...(d為欲四捨五入的double, scale為小數位數) 10/09 11:28
: : 推 ogamenewbie:如果要用 BigDecimal... 乾脆就不要轉回浮點了 XD 10/09 11:30
: : 推 ogamenewbie:也不要從浮點轉過去.. 10/09 11:31
: : 推 archerlin:請問O大精確的四捨五入用NumberFormat何解? ^^ 10/09 11:36
: 對我來說, 原po的需求是在用浮點數 (例如double或float) 的情況下,
: 去對結果, 一個要加以呈現的東西, 加以修飾呈現.
: 所以我第一個想到的就是 numberformat.
: 這其中本來就是不精確的. 因為 double 本來就不保證他的數值是精確的.
: 而你提到的 BigDecimal, 是保證他的結果是精確的.
: 但是有個前提, 那就是傳入的資料來源也是精確的 (例如 String)
: 所以我看到傳入的是 double, 感覺就很差.
: 再把問題丟回給你, 假設 d 是 1, 取到小數兩位,
: 不對 d 做額外處理的情況下, 你上面的程式能直接印出 d 是 1.00 嘛?
有些事情想確認一下
因為我很少用四捨五入的東西
因為numbrformat有點看不懂...
我有用DecimalFormat去做
1.覺得用比較簡單
2.我想效果是一樣的
結果像2.25...
正常四捨五入應該是2.3
我的結果是2.2
對2.375四捨五入的結果是2.4
根據o大的講解...
這也都是因為浮點數的誤差關係嗎
另外這麼說來的話
如果想要進行正確的四捨五入運算
是否應該要把double轉成字串
然後再使用BigDecimal
雖然a大說的我看不太懂...
得再去google研究一下相關參數之類的
不過之前是因為連要找啥都沒啥頭緒
很感謝大大們給了我該從哪著手的方向=.=+
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.170.69.229
→
10/09 21:46, , 1F
10/09 21:46, 1F
→
10/09 21:47, , 2F
10/09 21:47, 2F
討論串 (同標題文章)