java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:

第一种:BigDecimal(double val)
Translates a double into a BigDecimal.

第二种:BigDecimal(String val)
Translates the String repre sentation of a BigDecimal into a BigDecimal.

使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。

  1. public static double add(double v1,double v2)
  2. public static double sub(double v1,double v2)
  3. public static double mul(double v1,double v2)
  4. public static double div(double v1,double v2)
  5. public static double div(double v1,double v2,int scale)
  6. public static double round(double v,int scale)
  1. import java.math.BigDecimal;
  2. /**
  3. * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
  4. * 确的浮点数运算,包括加减乘除和四舍五入。
  5. */
  6. public class Arith{ //默认除法运算精度
  7. private static final int DEF_DIV_SCALE = 10; //这个类不能实例化
  8. private Arith(){
  9. }
  10. /**
  11. * 提供精确的加法运算。
  12. * @param v1 被加数
  13. * @param v2 加数
  14. * @return 两个参数的和
  15. */
  16. public static double add(double v1,double v2){
  17. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  18. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  19. return b1.add(b2).doubleValue();
  20. }
  21. /**
  22. * 提供精确的减法运算。
  23. * @param v1 被减数
  24. * @param v2 减数
  25. * @return 两个参数的差
  26. */
  27. public static double sub(double v1,double v2){
  28. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  29. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  30. return b1.subtract(b2).doubleValue();
  31. }
  32. /**
  33. * 提供精确的乘法运算。
  34. * @param v1 被乘数
  35. * @param v2 乘数
  36. * @return 两个参数的积
  37. */
  38. public static double mul(double v1,double v2){
  39. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  40. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  41. return b1.multiply(b2).doubleValue();
  42. }
  43. /**
  44. * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
  45. * 小数点以后10位,以后的数字四舍五入。
  46. * @param v1 被除数
  47. * @param v2 除数
  48. * @return 两个参数的商
  49. */
  50. public static double div(double v1,double v2){
  51. return div(v1,v2,DEF_DIV_SCALE);
  52. }
  53. /**
  54. * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
  55. * 定精度,以后的数字四舍五入。
  56. * @param v1 被除数
  57. * @param v2 除数
  58. * @param scale 表示表示需要精确到小数点以后几位。
  59. * @return 两个参数的商
  60. */
  61. public static double div(double v1,double v2,int scale){
  62. if(scale<0){
  63. throw new IllegalArgumentException(
  64. "The scale must be a positive integer or zero");
  65. }
  66. BigDecimal b1 = new BigDecimal(Double.toString(v1));
  67. BigDecimal b2 = new BigDecimal(Double.toString(v2));
  68. return b2.divide(b1,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
  69. }
  70. /**
  71. * 提供精确的小数位四舍五入处理。
  72. * @param v 需要四舍五入的数字
  73. * @param scale 小数点后保留几位
  74. * @return 四舍五入后的结果
  75. */
  76. public static double round(double v,int scale){
  77. if(scale<0){
  78. throw new IllegalArgumentException("The scale must be a positive integer or zero");
  79. }
  80. BigDecimal b = new BigDecimal(Double.toString(v));
  81. BigDecimal one = new BigDecimal("1");
  82. return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
  83. }
  84. };

java BigDecimal实现精确加减乘除运算的更多相关文章

  1. Java BigDecimal类型的 加减乘除运算

    原文: https://blog.csdn.net/xuwei_net/article/details/81253471 加法:add 减法:subtract 乘法:multiply 除法:divid ...

  2. 使用Java BigDecimal进行精确运算

    首先我们先来看如下代码示例: public class Test_1 {     public static void main(String[] args) {         System.out ...

  3. Java BigDecimal进行精确计算

    前言 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以 ...

  4. 使用BigDecimal进行精确运算以及格式化输出数字

    一.引言    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...

  5. java学习第13天( java获取当前时间,有关大数据的运算及精确数字运算,Date类)

    一 java获取当前时间 学习一个函数,得到当前时间的准确值 System.currectTimeMillis(). 可以得到以毫秒为单位的当前时间.它主要用于计算程序运行时间,long start= ...

  6. 精确的double加减乘除运算工具类

    import java.math.BigDecimal; /** * 精确的double加减乘除运算 * @author cyf * */ public class DoubleUtil { /** ...

  7. BigDecimal加减乘除运算(转)

    java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val) Translates a doub ...

  8. Java BigDecimal详解

    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 较为精确的快速近 ...

  9. Java BigDecimal详解,提供了丰富的四舍五入规则

    java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作. toString()方法提供BigDecimal的规范表示.它使用户可以完全控制舍入行为. 提供 ...

随机推荐

  1. Xmind在win10更改用户设置后出现Invalid Configuration Location 错误的解决办法

    错误原因: 因为一开始新建win10用户时,使用的是中文用户名,导致了部分软件比如IDEA读取C盘中配置文件时报错.我用管理员权限修改用户姓名为英文后,IDEA的问题虽然已经解决,但Xmind却报出了 ...

  2. 线程同步方式之互斥量Mutex

    互斥量和临界区非常相似,只有拥有了互斥对象的线程才可以访问共享资源,而互斥对象只有一个,因此可以保证同一时刻有且仅有一个线程可以访问共享资源,达到线程同步的目的. 互斥量相对于临界区更为高级,可以对互 ...

  3. CentOs下MySQL5.6.32源码安装

    . 安装好--安装MySQL需要的包 yum install -y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c+ ...

  4. Kafka学习之路 (一)Kafka的简介

    一.简介 1.1 概述 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/ng ...

  5. App常见产品问题及预防方法

    01界面适配 a:手机分辨率为1920x7080的高分辨率手机,在调整手机字体大小时,会导致页面显示出现变形: b:因用户设置的特殊字体导致列表的字母条不显示: c:某些banner 图片在部分机型只 ...

  6. Node.js实战(二)之HelloWorld示例

    经过前面的Node.js实战(一)之概述 想必你应该对Node.js的概念.应用场景.优缺点等有个大致的了解,同时你本地Windows或者Linux上已经准备好了Node.js环境. 下面我们来进入每 ...

  7. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  8. mysql linux 安装卸载

    mysql安装包官网https://dev.mysql.com/downloads/mysql/5.7.html#downloads wget https://dev.mysql.com/get/Do ...

  9. fabric简单案例

    1  执行一个简单的task任务,显示两台机器的/home/guol/目录下的文件 from fabric.api import * env.users='root' env.port=22 env. ...

  10. day35

    今日内容: 1.进程间互相通信(IPC机制) 2.生产者消费者模型 3.线程理论 4.线程开启的两种方式 5.线程相关属性方法 6.守护线程 7.线程互斥锁 1.进程间相互通信(IPC机制) 主要是一 ...