(double) (Math.round(sd3*10000)/10000.0); // 這樣為保持4位 (double) (Math.round(sd3*100)/100.0); // 這樣為保持2位.
2.另一種辦法
import java.text.DecimalFormat; // 第一個為2位,第二個為3位. DecimalFormat df2 = new DecimalFormat("###.00"); DecimalFormat df2 = new DecimalFormat("###.000"); System.out.println(df2.format(doube_var));
3.第三種方法
BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); rslt = b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); // scale表示表示需要精確到小數點以后幾位。
4.第四種方法
如果要精確計算后去除小數點,計算出來BigDecimal類型的結果后,有如下三個方法:
toBigInteger() // 如果數字很大用這個,返回一個BigInteger類的對象(JAVA中有這樣的類,如果你的程序確實只要整數的話就用這個類吧。),小數部分直接CUT。 intValue() // 返回int型 longValue() // 返回long型
參考:http://foolraty.iteye.com/blog/648171
import java.math.BigDecimal; import java.text.DecimalFormat; public class TestGetInt { public static void main(String[] args) { double i = 2, j = 2.1, k = 2.5, m = 2.9; System.out.println("舍掉小數取整:Math.floor(" + i + ")=" + (int) Math.floor(i)); System.out.println("舍掉小數取整:Math.floor(" + j + ")=" + (int) Math.floor(j)); System.out.println("舍掉小數取整:Math.floor(" + k + ")=" + (int) Math.floor(k)); System.out.println("舍掉小數取整:Math.floor(" + m + ")=" + (int) Math.floor(m)); System.out.println(); System.out.println("舍掉小數取整:Math.floor(-" + i + ")=" + (int) Math.floor(-i)); System.out.println("舍掉小數取整:Math.floor(-" + j + ")=" + (int) Math.floor(-j)); System.out.println("舍掉小數取整:Math.floor(-" + k + ")=" + (int) Math.floor(-k)); System.out.println("舍掉小數取整:Math.floor(-" + m + ")=" + (int) Math.floor(-m)); System.out.println(); // 這段被注釋的代碼不能正確的實現四舍五入取整 System.out.println("四舍五入取整:Math.rint(" + i + ")=" + (int) Math.rint(i)); System.out.println("四舍五入取整:Math.rint(" + j + ")=" + (int) Math.rint(j)); System.out.println("四舍五入取整:Math.rint(" + k + ")=" + (int) Math.rint(k)); System.out.println("四舍五入取整:Math.rint(" + m + ")=" + (int) Math.rint(m)); System.out.println(); System.out.println("四舍五入取整:Math.rint(-" + i + ")=" + (int) Math.rint(-i)); System.out.println("四舍五入取整:Math.rint(-" + j + ")=" + (int) Math.rint(-j)); System.out.println("四舍五入取整:Math.rint(-" + k + ")=" + (int) Math.rint(-k)); System.out.println("四舍五入取整:Math.rint(-" + m + ")=" + (int) Math.rint(-m)); System.out.println(); System.out.println("DecimalFormat四舍五入取整:(" + i + ")=" + new DecimalFormat("0").format(i)); System.out.println("DecimalFormat四舍五入取整:(" + j + ")=" + new DecimalFormat("0").format(j)); System.out.println("DecimalFormat四舍五入取整:(" + k + ")=" + new DecimalFormat("0").format(k)); System.out.println("DecimalFormat四舍五入取整:(" + m + ")=" + new DecimalFormat("0").format(m)); System.out.println(); System.out.println("DecimalFormat四舍五入取整:(-" + i + ")=" + new DecimalFormat("0").format(-i)); System.out.println("DecimalFormat四舍五入取整:(-" + j + ")=" + new DecimalFormat("0").format(-j)); System.out.println("DecimalFormat四舍五入取整:(-" + k + ")=" + new DecimalFormat("0").format(-k)); System.out.println("DecimalFormat四舍五入取整:(-" + m + ")=" + new DecimalFormat("0").format(-m)); System.out.println(); System.out.println("BigDecimal四舍五入取整:(" + i + ")=" + new BigDecimal("2").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(" + j + ")=" + new BigDecimal("2.1").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(" + k + ")=" + new BigDecimal("2.5").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(" + m + ")=" + new BigDecimal("2.9").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(); System.out.println("BigDecimal四舍五入取整:(-" + i + ")=" + new BigDecimal("-2").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(-" + j + ")=" + new BigDecimal("-2.1").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(-" + k + ")=" + new BigDecimal("-2.5").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println("BigDecimal四舍五入取整:(-" + m + ")=" + new BigDecimal("-2.9").setScale(0, BigDecimal.ROUND_HALF_UP)); System.out.println(); System.out.println("湊整:Math.ceil(" + i + ")=" + (int) Math.ceil(i)); System.out.println("湊整:Math.ceil(" + j + ")=" + (int) Math.ceil(j)); System.out.println("湊整:Math.ceil(" + k + ")=" + (int) Math.ceil(k)); System.out.println("湊整:Math.ceil(" + m + ")=" + (int) Math.ceil(m)); System.out.println(); System.out.println("湊整:Math.ceil(-" + i + ")=" + (int) Math.ceil(-i)); System.out.println("湊整:Math.ceil(-" + j + ")=" + (int) Math.ceil(-j)); System.out.println("湊整:Math.ceil(-" + k + ")=" + (int) Math.ceil(-k)); System.out.println("湊整:Math.ceil(-" + m + ")=" + (int) Math.ceil(-m)); System.out.println(); System.out.println("四舍五入取整:Math.round(" + i + ")=" + (int) Math.round(i)); System.out.println("四舍五入取整:Math.round(" + j + ")=" + (int) Math.round(j)); System.out.println("四舍五入取整:Math.round(" + k + ")=" + (int) Math.round(k)); System.out.println("四舍五入取整:Math.round(" + m + ")=" + (int) Math.round(m)); System.out.println(); System.out.println("四舍五入取整:Math.round(-" + i + ")=" + (int) Math.round(-i)); System.out.println("四舍五入取整:Math.round(-" + j + ")=" + (int) Math.round(-j)); System.out.println("四舍五入取整:Math.round(-" + k + ")=" + (int) Math.round(-k)); System.out.println("四舍五入取整:Math.round(-" + m + ")=" + (int) Math.round(-m)); } }
舍掉小數取整:Math.floor(2.0)=2
舍掉小數取整:Math.floor(2.1)=2
舍掉小數取整:Math.floor(2.5)=2
舍掉小數取整:Math.floor(2.9)=2
舍掉小數取整:Math.floor(-2.0)=-2
舍掉小數取整:Math.floor(-2.1)=-3
舍掉小數取整:Math.floor(-2.5)=-3
舍掉小數取整:Math.floor(-2.9)=-3
四舍五入取整:Math.rint(2.0)=2
四舍五入取整:Math.rint(2.1)=2
四舍五入取整:Math.rint(2.5)=2
四舍五入取整:Math.rint(2.9)=3
四舍五入取整:Math.rint(-2.0)=-2
四舍五入取整:Math.rint(-2.1)=-2
四舍五入取整:Math.rint(-2.5)=-2
四舍五入取整:Math.rint(-2.9)=-3
DecimalFormat四舍五入取整:(2.0)=2
DecimalFormat四舍五入取整:(2.1)=2
DecimalFormat四舍五入取整:(2.5)=2
DecimalFormat四舍五入取整:(2.9)=3
DecimalFormat四舍五入取整:(-2.0)=-2
DecimalFormat四舍五入取整:(-2.1)=-2
DecimalFormat四舍五入取整:(-2.5)=-2
DecimalFormat四舍五入取整:(-2.9)=-3
BigDecimal四舍五入取整:(2.0)=2
BigDecimal四舍五入取整:(2.1)=2
BigDecimal四舍五入取整:(2.5)=3
BigDecimal四舍五入取整:(2.9)=3
BigDecimal四舍五入取整:(-2.0)=-2
BigDecimal四舍五入取整:(-2.1)=-2
BigDecimal四舍五入取整:(-2.5)=-3
BigDecimal四舍五入取整:(-2.9)=-3
湊整:Math.ceil(2.0)=2
湊整:Math.ceil(2.1)=3
湊整:Math.ceil(2.5)=3
湊整:Math.ceil(2.9)=3
湊整:Math.ceil(-2.0)=-2
湊整:Math.ceil(-2.1)=-2
湊整:Math.ceil(-2.5)=-2
湊整:Math.ceil(-2.9)=-2
四舍五入取整:Math.round(2.0)=2
四舍五入取整:Math.round(2.1)=2
四舍五入取整:Math.round(2.5)=3
四舍五入取整:Math.round(2.9)=3
四舍五入取整:Math.round(-2.0)=-2
四舍五入取整:Math.round(-2.1)=-2
四舍五入取整:Math.round(-2.5)=-2
四舍五入取整:Math.round(-2.9)=-3
//==================================================================
關於BigDecimal的詳細用法,可以參看
http://liuzidong.iteye.com/blog/1172248
最后摘錄網上的一個程序員寫的精確工具類,在很多文章中都有此代碼,可以參考
import java.math.BigDecimal; /** * @author Jstar */ public class Arith { // 默認除法運算精度 private static final int DEF_DIV_SCALE = 10; // 這個類不能實例化 private Arith() { } /** * 提供精確的加法運算 * @param v1 被加數 * @param v2 加數 * @return 兩個參數的和 */ public static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } /** * 提供精確的減法運算 * @param v1 被減數 * @param v2 減數 * @return 兩個參數的差 */ public static double sub(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.subtract(b2).doubleValue(); } /** * 提供精確的乘法運算 * @param v1 被乘數 * @param v2 乘數 * @return 兩個參數的積 */ public static double mul(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.multiply(b2).doubleValue(); } /** * 提供(相對)精確的除法運算,當發生除不盡的情況時,精確到 小數點以后10位,以后的數字四舍五入 * @param v1 被除數 * @param v2 除數 * @return 兩個參數的商 */ public static double div(double v1, double v2) { return div(v1, v2, DEF_DIV_SCALE); } /** * 提供(相對)精確的除法運算。當發生除不盡的情況時,由scale參數指 定精度,以后的數字四舍五入。 * @param v1 被除數 * @param v2 除數 * @param scale 表示表示需要精確到小數點以后幾位。 * @return 兩個參數的商 */ public static double div(double v1, double v2, int scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } /** * 提供精確的小數位四舍五入處理。 * @param v 需要四舍五入的數字 * @param scale 小數點后保留幾位 * @return 四舍五入后的結果 */ public static double round(double v, int scale) { if (scale < 0) { throw new IllegalArgumentException( "The scale must be a positive integer or zero"); } BigDecimal b = new BigDecimal(Double.toString(v)); BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } }