java除法保存小数点后位数的方法(附精确计算工具类)

您所在的位置:网站首页 如何去掉小数点后两位之后的数字 java除法保存小数点后位数的方法(附精确计算工具类)

java除法保存小数点后位数的方法(附精确计算工具类)

2024-07-13 05:20| 来源: 网络整理| 查看: 265

(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)=2DecimalFormat四舍五入取整:(2.1)=2DecimalFormat四舍五入取整:(2.5)=2DecimalFormat四舍五入取整:(2.9)=3

DecimalFormat四舍五入取整:(-2.0)=-2DecimalFormat四舍五入取整:(-2.1)=-2DecimalFormat四舍五入取整:(-2.5)=-2DecimalFormat四舍五入取整:(-2.9)=-3

BigDecimal四舍五入取整:(2.0)=2BigDecimal四舍五入取整:(2.1)=2BigDecimal四舍五入取整:(2.5)=3BigDecimal四舍五入取整:(2.9)=3

BigDecimal四舍五入取整:(-2.0)=-2BigDecimal四舍五入取整:(-2.1)=-2BigDecimal四舍五入取整:(-2.5)=-3BigDecimal四舍五入取整:(-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(); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3