博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中的数学运算BigDecimal
阅读量:7119 次
发布时间:2019-06-28

本文共 4200 字,大约阅读时间需要 14 分钟。

Math类

package ch7;/** * Created by Jiqing on 2016/11/24. */public class MathDemo {    public static void main(String[] args) {        /* 取整运算 */        // 返回小于目标数的最大整数        System.out.println("Math.floor(-1.2):"+Math.floor(-1.2)); // -2.0        // 返回大于目标数的最小整数        System.out.println("Math.ceil(1.2):"+Math.ceil(1.2)); // 2.0        // 四舍五入取整        System.out.println("Math.round(2.3):" +Math.round(2.3)); // 2        /* 大小相关计算 */        // 找出最大值        System.out.println("Math.max(2.3,4.5):"+Math.max(2.3,4.5)); // 4.5        // 找出最小值        System.out.println("Math.min(2.3,4.5):"+Math.min(2.3,4.5)); // 2.3        // 返回一个随机数0~1之间        System.out.println("Math.random():"+Math.random());    }}

BigDecimal

package ch7;import java.math.BigDecimal;/** * Created by Jiqing on 2016/11/24. */public class BigDecimalDemo {    public static void main(String[] args) {        // float、double容易精度丢失        System.out.println("0.05 + 0.01 = " + (0.05 + 0.01)); //0.060000000000000005        System.out.println("1.0 - 0.42 = " + (1.0 - 0.42)); //0.5800000000000001        System.out.println("4.015 * 100 = " + (4.015 * 100)); // 401.49999999999994        System.out.println("123.3 / 100 = " + (123.3 / 100)); // 1.2329999999999999        // BigDecimal解决精度问题        BigDecimal f1 = new BigDecimal("0.05"); // 使用String作为构造器参数        BigDecimal f2 = BigDecimal.valueOf(0.01);        BigDecimal f3 = new BigDecimal(0.05); // 使用double作为构造器参数        System.out.println("使用String作为BigDecimal构造器参数:");        System.out.println("0.05 + 0.01 = " + f1.add(f2));        System.out.println("0.05 - 0.01 = " + f1.subtract(f2));        System.out.println("0.05 * 0.01 = " + f1.multiply(f2));        System.out.println("0.05 / 0.01 = " + f1.divide(f2));        //使用String作为BigDecimal构造器参数:        //0.05 + 0.01 = 0.06        //0.05 - 0.01 = 0.04        //0.05 * 0.01 = 0.0005        //0.05 / 0.01 = 5        System.out.println("使用double作为BigDecimal构造器参数:");        System.out.println("0.05 + 0.01 = " + f3.add(f2));        System.out.println("0.05 - 0.01 = " + f3.subtract(f2));        System.out.println("0.05 * 0.01 = " + f3.multiply(f2));        System.out.println("0.05 / 0.01 = " + f3.divide(f2));        //使用double作为BigDecimal构造器参数:        //0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125        //0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125        //0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125        //0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125    }}

衍生出来的工具类Arith

package ch7;import java.math.BigDecimal;import java.util.function.BinaryOperator;/** * Created by Jiqing on 2016/11/24. */public class Arith {    // 进行精确计算的工具类    // 默认除法运算精度    private static final int DEF_DIV_SCALE = 10;    // 构造器私有,让这个类不能实例化    private Arith() {}    // 提供精确的加法运算    public static double add(double v1,double v2) {        BigDecimal b1 = BigDecimal.valueOf(v1);        BigDecimal b2 = BigDecimal.valueOf(v2);        return b1.add(b2).doubleValue();    }    // 提供精确减法运算    public static double sub(double v1,double v2) {        BigDecimal b1 = BigDecimal.valueOf(v1);        BigDecimal b2 = BigDecimal.valueOf(v2);        return b1.subtract(b2).doubleValue();    }    // 提供精确的乘法运算    public static double mul(double v1,double v2) {        BigDecimal b1 = BigDecimal.valueOf(v1);        BigDecimal b2 = BigDecimal.valueOf(v2);        return b1.multiply(b2).doubleValue();    }    // 提供相对精确的除法运算    public static double div(double v1,double v2) {        BigDecimal b1 = BigDecimal.valueOf(v1);        BigDecimal b2 = BigDecimal.valueOf(v2);        return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();    }    public static void main(String[] args) {        System.out.println("0.05 + 0.01= " + Arith.add(0.05,0.01)); //0.05 + 0.01= 0.06        System.out.println("1.0 - 0.42= " + Arith.sub(1.0,0.42)); //1.0 - 0.42= 0.58        System.out.println("4.015 * 100= " + Arith.mul(4.015,100)); //4.015 * 100= 401.5        System.out.println("123.3 / 1000= " + Arith.div(123.3,1000)); //123.3 / 1000= 0.1233    }}本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/6096213.html,如需转载请自行联系原作者
你可能感兴趣的文章
SQLite Java Wrapper/JDBC Driver(收集)
查看>>
《IT项目管理》读书笔记(5) —— 项目时间管理
查看>>
插入排序 来自《算法导论》
查看>>
分享50+精美的网页矢量背景和矢量图形素材【上篇】
查看>>
MongoDB 管理
查看>>
MySQL中的实例、数据库关系简介
查看>>
android 图片旋转
查看>>
IIS7 如何设置读取、脚本和可执行文件的执行权限
查看>>
hibernate---->一对多关联映射
查看>>
ProgressDialog 的xml 功能布局
查看>>
web-3g-163(网易)-邮箱和博客-数据架构设计
查看>>
百度云盘试用
查看>>
iku爱酷后台开放匿名代理服务 | WooYun-2011-02909 | WooYun.org
查看>>
discuz x!2.5 个人空间 日志模版
查看>>
[Ubuntu] 启动gvim时,怎样设置一个项目的文件为打开状态
查看>>
Spring学习篇:IoC知识整理(二)
查看>>
VS下如何配置才能使用 cl 命令行方式编译 C/C++ 程序
查看>>
【百度地图API】如何制作班级地理通讯录?LBS通讯录
查看>>
从源代码上理解 PostgreSQL 的 bgwriter_lru_maxpages
查看>>
PHP开源——elfinder网页文件管理器语言设置
查看>>