Re: [J2SE] 進行浮點數運算時如何四捨五入至小數第 …
※ 引述《thinkniht ()》之銘言:
: 有些事情想確認一下
: 因為我很少用四捨五入的東西
: 因為numbrformat有點看不懂...
: 我有用DecimalFormat去做
: 1.覺得用比較簡單
: 2.我想效果是一樣的
: 結果像2.25...
: 正常四捨五入應該是2.3
: 我的結果是2.2
: 對2.375四捨五入的結果是2.4
: 根據o大的講解...
: 這也都是因為浮點數的誤差關係嗎
: 另外這麼說來的話
: 如果想要進行正確的四捨五入運算
: 是否應該要把double轉成字串
: 然後再使用BigDecimal
: 雖然a大說的我看不太懂...
: 得再去google研究一下相關參數之類的
: 不過之前是因為連要找啥都沒啥頭緒
: 很感謝大大們給了我該從哪著手的方向=.=+
關於 double 轉 BigDecimal 的精確..
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
#BigDecimal(double)
==========================================================================
public BigDecimal(double val)
Note: the results of this constructor can be somewhat unpredictable.
One might assume that new BigDecimal(.1) is exactly equal to .1,
but it is actually equal to
.1000000000000000055511151231257827021181583404541015625.
This is so because .1 cannot be represented exactly as a double
(or, for that matter, as a binary fraction of any finite length).
Thus, the long value that is being passed in to the constructor
is not exactly equal to .1, appearances nonwithstanding.
The (String) constructor, on the other hand, is perfectly predictable:
new BigDecimal(".1") is exactly equal to .1, as one would expect.
Therefore, it is generally recommended that the (String) constructor
be used in preference to this one.
==========================================================================
關於 DecimalFormat 的四捨五入
http://java.sun.com/j2se/1.5.0/docs/api/java/text/DecimalFormat.html
==========================================================================
Rounding
DecimalFormat uses half-even rounding (see ROUND_HALF_EVEN) for formatting.
==========================================================================
ROUND_HALF_EVEN
http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html
#ROUND_HALF_EVEN
==========================================================================
Rounding mode to round towards the "nearest neighbor"
unless both neighbors are equidistant,
in which case, round towards the even neighbor.
Behaves as for ROUND_HALF_UP if the digit to
the left of the discarded fraction is odd;
behaves as for ROUND_HALF_DOWN if it's even.
Note that this is the rounding mode that minimizes cumulative error
when applied repeatedly over a sequence of calculations.
==========================================================================
如果你是用 Java SE 6
DecimalFormat 好像可以換四捨五入的方法
http://java.sun.com/javase/6/docs/api/java/text/DecimalFormat.html
==========================================================================
DecimalFormat provides rounding modes defined in RoundingMode for formatting.
By default, it uses RoundingMode.HALF_EVEN.
==========================================================================
--
果然還是翻 Docs 最快了.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.148.49
※ 編輯: ogamenewbie 來自: 163.25.148.49 (10/09 17:47)
※ 編輯: ogamenewbie 來自: 163.25.148.49 (10/09 17:48)
推
10/09 21:40, , 1F
10/09 21:40, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 17 篇):