JAVA對double或者 float的浮點數精度計算控制方法

來源:互聯網
上載者:User

本篇介紹了在JAVA中如何對double或者float的浮點數進行精度計算,在JAVA中提供了多種參數來實現精度的不同控制方式。具體例子如下:

/*<br /> * Created on 2005-6-5<br /> * Author stephen<br /> * Email zhoujianqiang AT gmail DOT com<br /> * CopyRight(C)2005-2008 , All rights reserved.<br /> */<br />package com.soft4j.utility;<br />import java.math.BigDecimal;<br />/**<br /> * 與小數位精度(四捨五入等)相關的一些常用工具方法.<br /> *<br /> * float/double的精度取值方式分為以下幾種: <br><br /> * java.math.BigDecimal.ROUND_UP <br><br /> * java.math.BigDecimal.ROUND_DOWN <br><br /> * java.math.BigDecimal.ROUND_CEILING <br><br /> * java.math.BigDecimal.ROUND_FLOOR <br><br /> * java.math.BigDecimal.ROUND_HALF_UP<br><br /> * java.math.BigDecimal.ROUND_HALF_DOWN <br><br /> * java.math.BigDecimal.ROUND_HALF_EVEN <br><br /> *<br /> * @author stephen<br /> * @version 1.0.0<br /> */<br />public final class RoundTool {<br /> /**<br /> * 對double資料進行取精度.<br /> * <p><br /> * For example: <br><br /> * double value = 100.345678; <br><br /> * double ret = round(value,4,BigDecimal.ROUND_HALF_UP); <br><br /> * ret為100.3457 <br><br /> *<br /> * @param value<br /> * double資料.<br /> * @param scale<br /> * 精度位元(保留的小數位元).<br /> * @param roundingMode<br /> * 精度取值方式.<br /> * @return 精度計算後的資料.<br /> */<br /> public static double round(double value, int scale, int roundingMode) {<br /> BigDecimal bd = new BigDecimal(value);<br /> bd = bd.setScale(scale, roundingMode);<br /> double d = bd.doubleValue();<br /> bd = null;<br /> return d;<br /> }<br /> /**<br /> * 測試用的main方法.<br /> *<br /> * @param argc<br /> * 運行參數.<br /> */<br /> public static void main(String[] argc) {<br /> //下面都以保留2位小數為例</p><p> //ROUND_UP<br /> //只要第2位後面存在大於0的小數,則第2位就+1<br /> System.out.println(round(12.3401,2,BigDecimal.ROUND_UP));//12.35<br /> System.out.println(round(-12.3401,2,BigDecimal.ROUND_UP));//-12.35<br /> //ROUND_DOWN<br /> //與ROUND_UP相反<br /> //直接捨棄第2位後面的所有小數<br /> System.out.println(round(12.349,2,BigDecimal.ROUND_DOWN));//12.34<br /> System.out.println(round(-12.349,2,BigDecimal.ROUND_DOWN));//-12.34<br /> //ROUND_CEILING<br /> //如果數字>0 則和ROUND_UP作用一樣<br /> //如果數字<0 則和ROUND_DOWN作用一樣<br /> System.out.println(round(12.3401,2,BigDecimal.ROUND_CEILING));//12.35<br /> System.out.println(round(-12.349,2,BigDecimal.ROUND_CEILING));//-12.34<br /> //ROUND_FLOOR<br /> //如果數字>0 則和ROUND_DOWN作用一樣<br /> //如果數字<0 則和ROUND_UP作用一樣<br /> System.out.println(round(12.349,2,BigDecimal.ROUND_FLOOR));//12.34<br /> System.out.println(round(-12.3401,2,BigDecimal.ROUND_FLOOR));//-12.35<br /> //ROUND_HALF_UP [這種方法最常用]<br /> //如果第3位元字>=5,則第2位元字+1<br /> //備忘:只看第3位元字的值,不會考慮第3位之後的小數的<br /> System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_UP));//12.35<br /> System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_UP));//12.34<br /> System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_UP));//-12.35<br /> System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_UP));//-12.34<br /> //ROUND_HALF_DOWN<br /> //如果第3位元字>=5,則做ROUND_UP<br /> //如果第3位元字<5,則做ROUND_DOWN<br /> System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_DOWN));//12.35<br /> System.out.println(round(12.3449,2,BigDecimal.ROUND_HALF_DOWN));//12.34<br /> System.out.println(round(-12.345,2,BigDecimal.ROUND_HALF_DOWN));//-12.35<br /> System.out.println(round(-12.3449,2,BigDecimal.ROUND_HALF_DOWN));//-12.34<br /> //ROUND_HALF_EVEN<br /> //如果第3位是偶數,則做ROUND_HALF_DOWN<br /> //如果第3位是奇數,則做ROUND_HALF_UP<br /> System.out.println(round(12.346,2,BigDecimal.ROUND_HALF_EVEN));//12.35<br /> System.out.println(round(12.345,2,BigDecimal.ROUND_HALF_EVEN));//12.35<br /> }<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.