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
}
}

Java中的数学运算BigDecimal的更多相关文章

  1. Java中的递归运算

    Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...

  2. shell脚本中的数学运算

    shell中的赋值和操作默认都是字符串处理,在此记下shell中进行数学运算的几个特殊方法.以后用到的时候能够来看,呵呵 1.错误方法举例 a) var=1+1 echo $var 输出的结果是1+1 ...

  3. Unity3D中Mathf数学运算函数总结

    引入: 看到一个案例注意到函数Mathf.SmoothDamp的使用,游戏中用于做相机的缓冲跟踪和boss直升机跟踪士兵.该函数是Unity3D中Mathf数学运算函数中的一个.一些游戏使用了smoo ...

  4. Shell编程——Shell中的数学运算

    在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...

  5. JAVA中double类型运算结果异常的解决

    问题: 对两个double类型的值进行运算,有时会出现结果值异常的问题.比如: System.out.println(19.99+20); System.out.println(1.0-0.66); ...

  6. shell中的数学运算

    shell中要进行数学运算通常有3中方法: expr命令 比如 expr 1 + 6就会返回7,使用expr的缺点就是碰到乘法运算,或者加括号(因为它们在shell中有其他意义),需要使用转义,比如: ...

  7. Java中的位运算及简单的算法应用介绍

    众所周知,计算机底层是二进制.而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持. 在java中,int是32位的,也就是说可以用来实现32位的位运算.方便起见,我们一般用16进制对 ...

  8. Java中「与运算,或运算,异或运算,取反运算。」

    版权声明一:本文为博主原创文章,转载请附上原文出处链接和本声明.版权声明二:本网站的所有作品会及时更新,欢迎大家阅读后发表评论,以利作品的完善.版权声明三:对不遵守本声明或其他违法.恶意使用本网内容者 ...

  9. java字符串类型数学运算表达式以及精度丢失问题

    字符串类型数学运算精度丢失问题 方式一:ScriptEngine 会精度丢失,可执行连续双括号 方式二:hutool ScriptUtil 会精度丢失,可执行连续双括号 方式三:hutool Scri ...

随机推荐

  1. CalParcess.php.

    <?php require_once "OperSerVice.class.php"; //接受三个数 //isset if(!isset($_REQUEST['NUM1'] ...

  2. java 编程时候的性能调优

    一.避免在循环条件中使用复杂表达式 在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快. 例子: import java.util ...

  3. 【转】cvs2svn 把CVS档案库转换为SVN档案库

    转载地址:http://jackdown.blog.sohu.com/66646130.html 在linux下的操作 1).安装 下载:Python 2.0   地址:http://www.pyth ...

  4. rapidminer 数据导入及几个算子简单应用

    rapidminer 数据导入及几个算子简单应用 一. 数据集选择 本次实验选择的数据集为: bank-data.csv 其中有600条数据 结构如下图: 二.数据集文件格式转换 Rapidminer ...

  5. 2016 Al-Baath University Training Camp Contest-1 D

    Description X is well known artist, no one knows the secrete behind the beautiful paintings of X exc ...

  6. AJAX文档

    AJAX 文档 AJAX开发简略.................................................................................... ...

  7. 2016年11月1日 星期二 --出埃及记 Exodus 19:17

    2016年11月1日 星期二 --出埃及记 Exodus 19:17 Then Moses led the people out of the camp to meet with God, and t ...

  8. sql 邮件发送测试情况

    sql 邮件发送测试情况 select * from msdb.dbo.sysmail_allitems select * from msdb.dbo.sysmail_event_log

  9. MIME协议生成邮件

    MIME协议生成一封复杂的邮件 MIME协议是对RFC822文档的升级和补充,用MIME协议能生成一封有文字.图片和附件的复杂邮件.首先要导入activation.jar和mail.jar.Mail. ...

  10. BZOJ 1061 志愿者招募(最小费用最大流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1061 题意:申奥成功后,布布经过不懈努力,终于 成为奥组委下属公司人力资源部门的主管.布 ...