天天看點

沫沫金:自定義四舍五入(根據第二位決定是進位或直接替換為5)

需求:

根據小數點後第二位,判斷大于5進位,小于等于5則将第二位替換為5。

本人一遍沒有寫完善,這裡貼出後期完善後的代碼(歡迎各位提供漏洞)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<code>/**</code>

<code> </code><code>* 根據小數點第二位,進行判斷</code>

<code> </code><code>* @author 章力</code>

<code> </code><code>* @email [email protected]</code>

<code> </code><code>*/</code>

<code>public</code> <code>static</code> <code>String round(BigDecimal bgd){</code>

<code>    </code><code>// 隻擷取小數點後兩位</code>

<code>    </code><code>DecimalFormat dfmt = </code><code>new</code> <code>DecimalFormat(</code><code>"0.##"</code><code>);</code>

<code>    </code><code>String bgdStr = dfmt.format(bgd);</code>

<code>    </code><code>// 小數點下标</code>

<code>    </code><code>int</code> <code>idx = bgdStr.indexOf(</code><code>"."</code><code>);</code>

<code>    </code><code>if</code><code>(idx&gt;</code><code>0</code><code>){</code>

<code>        </code><code>// 整數部分</code>

<code>        </code><code>String intStr =  bgdStr.substring(</code><code>0</code><code>,idx);</code>

<code>        </code><code>// 小數點後第1位數</code>

<code>        </code><code>String postOne = bgdStr.substring(idx+</code><code>1</code><code>, idx+</code><code>2</code><code>);</code>

<code>        </code><code>// 規則計算後的數值</code>

<code>        </code><code>String newNumU = dfmt.format(Double.parseDouble(intStr+</code><code>"."</code><code>+postOne)+</code><code>0.1</code><code>);</code>

<code>        </code><code>String newNumD = intStr+</code><code>"."</code><code>+postOne+</code><code>"5"</code><code>;</code>

<code>        </code> 

<code>        </code><code>// 小數點後隻有一位小數,預設第二位是零&gt;小于5,直接替換為5</code>

<code>        </code><code>int</code> <code>postnL = bgdStr.length()-(idx+</code><code>1</code><code>);</code>

<code>        </code><code>if</code><code>(postnL&lt;</code><code>2</code><code>){</code>

<code>            </code><code>return</code> <code>newNumD;</code>

<code>        </code><code>}</code>

<code>        </code><code>// 小數點後有第二位,進行規則判斷</code>

<code>        </code><code>// 大于5,向上進位</code>

<code>        </code><code>// 小于等于5,直接替換為5</code>

<code>        </code><code>int</code> <code>postTwo = Integer.parseInt(bgdStr.substring(idx+</code><code>2</code><code>));</code>

<code>        </code><code>if</code><code>(postTwo&gt;</code><code>5</code><code>){</code>

<code>            </code><code>return</code> <code>newNumU;</code>

<code>        </code><code>}</code><code>else</code><code>{</code>

<code>    </code><code>}</code><code>else</code><code>{</code>

<code>        </code><code>return</code> <code>bgdStr+</code><code>".05"</code><code>;</code>

<code>    </code><code>}</code>

<code>}</code>

<code></code>

本文轉自 沫沫金 51CTO部落格,原文連結:http://blog.51cto.com/zl0828/1420043,如需轉載請自行聯系原作者