BigDecimal加减乘除运算

BigDecimal加减乘除运算java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:第一种:BigDecimal(doubleval)TranslatesadoubleintoaBigDecimal.第二种:BigDecimal(Stringval)TranslatestheStringrepresentationofaBig

大家好,又见面了,我是你们的朋友全栈君。 

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)再转换为浮点数。

public static double add(double v1,double v2)
public static double sub(double v1,double v2)
public static double mul(double v1,double v2)
public static double div(double v1,double v2)
public static double div(double v1,double v2,int scale)
public static double round(double v,int scale)

 

Java代码
复制代码 
收藏代码BigDecimal加减乘除运算

  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 b1.divide(b2,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. };  
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133850.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • list集合为空或为null的区别

    list集合为空或为null的区别简述判断一个list集合是否为空,我们的惯性思维是判断list是否等于null即可,但是在Java中,list集合为空还是为null,这是两码事。引用举个形象的例子,我有一个空着的水杯(list),而你没有,那你是null,我的size为0。你想装水就需要自己去买个水杯(new ArrayList();),但是我就可以直接装水(list.add(水))。你要是没有杯子直接倒水,水就流出…

  • Linux之旅(1): diff, patch和quilt (下)

    Linux之旅(1): diff, patch和quilt (下)

    2021年11月14日
  • C语言链表详解_c语言中链表的使用

    C语言链表详解_c语言中链表的使用链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用。链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节点。链表都有一个头指针,一般以head来表示,存放的是一个地址。链表中的节点分为两类,头结点和一般节点,头结点是没有数据域的。链表中每个节点都分为两部分,一个数据域,一个是指针域。说到这里你应该就明白…

    2022年10月21日
  • 【深度学习】5:CNN卷积神经网络原理

    【深度学习】5:CNN卷积神经网络原理前言:先坦白的说,深度神经网络的学习在一开始对我造成的困扰还是很大的,我也是通过不断地看相关的视频资料、文献讲解尝试去理解记忆。毕竟这些内容大多都是不可查的,我们看到的都只是输入输出的东西,里面的内部运作以及工作原理,都需要沉心静思。这篇CNN卷积神经网络的原理介绍,也是自己通过收集来的资料阅读、理解、操练后,有了一定的见解后才拙笔,里面的内容我会尽量详尽,不清楚明白的地方,望大家慧眼指出。–—

  • pycharm2021专业版永久激活码【2021最新】

    (pycharm2021专业版永久激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • CMake Error: The current CMakeCache.txt directory is different…[通俗易懂]

    CMake Error: The current CMakeCache.txt directory is different…[通俗易懂]零、问题描述开始学ROS时,需要编译别人的功能包,常常把别人的工作空间拿过来使用,但编译时会出现各种错误,如下的目录问题:CMakeError:ThecurrentCMakeCache.txtdirectory/home/vistar/desktop/catkin_ws/build/CMakeCache.txtisdifferentthanthedirectory/ho……………

    2022年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号