`
357029540
  • 浏览: 735919 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

BIGDECIMAL用于实现浮点数的精确计算

    博客分类:
  • JAVA
阅读更多
//用于实现浮点数的精确计算
//****
//import java.util.Scanner;
import java.math.BigDecimal;

// 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精

// 确的浮点数运算,包括加减乘除和四舍五入。
//在BigDecimal中只能用String来构造



public class Arith{

   //默认除法运算精度

    privatestatic final int DEF_DIV_SCALE = 10;

   //这个类不能实例化

    privateArith(){

    }



    //提供精确的加法运算。

     //@param v1 被加数

    //@param v2 加数

    //@return 两个参数的和



    publicstatic 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两个参数的积



    publicstatic 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位,以后的数字四舍五入。

   //@paramv1 被除数

  //@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 两个参数的商



    publicstatic double div(double v1,double v2,int scale){

       if(scale<0){

           throw new IllegalArgumentException(

               "只能为整数或0(The scale must be a positive integer or zero)");

       }

       BigDecimal b1 = new BigDecimal(Double.toString(v1));

       BigDecimal b2 = new BigDecimal(Double.toString(v2));

       returnb1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

    }



    //提供精确的小数位四舍五入处理。

    //@param v 需要四舍五入的数字

   //@paramscale 小数点后保留几位

  // @return 四舍五入后的结果



    publicstatic 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");

       returnb.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

    }
    publicstatic void main(String [] args) {
        Scanner input = new Scanner(System.in);
   Arith arith = newArith();
   boolean isExit = true;
   while(isExit) {
        System.out.println("这里有以下几种运算,请你选择你要的运算:\n"
                    +"1.加法\n2.减法\n3.乘法\n4.除法\n5.指定小数点位数的除法\n6.把数字精确到指定位数");
       int choose = input.nextInt();
 
    switch(choose) {
         case 1 :
       System.out.println("你选择了加法运算!");
     System.out.print("请输入你的第一个数:");
     doublev1 = input.nextDouble();
     System.out.print("请输入你的第二个数:");
     doublev2 = input.nextDouble();
     System.out.println(arith.add(v1,v2));
     break;
    case2 :
       System.out.println("你选择了减法运算!");
     System.out.print("请输入你的第一个数:");
     doublev3 = input.nextDouble();
     System.out.print("请输入你的第二个数:");
     doublev4 = input.nextDouble();
     System.out.println(arith.sub(v3,v4));
     break;
    case3 :
       System.out.println("你选择了乘法运算!");
     System.out.print("请输入你的第一个数:");
     doublev5 = input.nextDouble();
     System.out.print("请输入你的第二个数:");
     doublev6 = input.nextDouble();
     System.out.println(arith.mul(v5,v6));
     break;
    case4 :
       System.out.println("你选择了除法运算!");
     System.out.print("请输入你的第一个数:");
     doublev7 = input.nextDouble();
     System.out.print("请输入你的第二个数:");
     doublev8 = input.nextDouble();
     System.out.println(arith.div(v7,v8));
     break;
      case 5 :
       System.out.println("你选择了指定位数的除法运算!");
     System.out.print("请输入你的第一个数:");
     doublev9 = input.nextDouble();
     System.out.print("请输入你的第二个数:");
     doublev10 = input.nextDouble();
     System.out.print("请输入保留小数点的位数:");
     intscale = input.nextInt();
     System.out.println(arith.div(v9,v10,scale));
     break;
    case6 :
       System.out.println("你选择了把数字精确到指定位数运算!");
     System.out.print("请输入你的第一个数:");
     doublev11 = input.nextDouble();
     System.out.print("请输入保留小数点的位数:");
     intscale1 = input.nextInt();
     System.out.println(arith.round(v11,scale1));
     break;
    default:
      System.out.println("没有你所要的选择算法");    
    }
    System.out.print("你是否需要重新进行下次计算(y/n)");
    String check = input.next();
    if(check.equalsIgnoreCase("n")) {
    isExit = false;
    break;
  }
  }
  }
}
分享到:
评论

相关推荐

    运用BigDecimal精确计算

    这篇博客将深入探讨`BigDecimal`的使用,以及如何通过它来实现精确计算。 `BigDecimal`是Java `java.math`包下的一个类,它提供了任意精度的有符号十进制数。其设计目标是支持任意精度的算术运算,确保结果的精确性...

    BigDecimal加减乘除计算

    在进行高精度计算时,BigDecimal 避免了浮点数计算的精度问题,提供了更精确的结果。需要注意的是,所有涉及到 BigDecimal 的运算都会创建新的对象,所以频繁操作可能会带来性能影响。为了优化性能,可以使用 `...

    BigDecimal的计算

    在Java中,`BigDecimal` 类提供了对超过16位有效数字的十进制数进行精确算术运算的能力。它适用于金融计算、科学计算等场景,在这些场景中,使用浮点数(如 `float` 和 `double`)可能会因为精度丢失而导致错误的...

    javascript版BigDecimal类库

    本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 JavaScript版的`BigDecimal`类库是基于Java原版`BigDecimal`的改编,旨在提供与Java版本相似的功能,以支持大整数和任意...

    浮点数计算为什么会出错

    对于那些需要更高精度的计算,比如金融计算,通常推荐使用特定的数值类型,例如Java中的BigDecimal,它不依赖于IEEE 754标准的浮点数表示,而是以任意精度来表示小数,这虽然会牺牲一些性能,但能提供更精确的结果。...

    BigDecimal-CPP-master.zip

    BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些场景中,浮点数的精度丢失可能导致错误的结果。 在计算机科学中,浮点数(如`float`和`double...

    JAVA中浮点数的运算

    例如,`DecimalConvertUtils.java`可能就是一个用于转换和操作`BigDecimal`的工具类,可能包含了将基本类型的浮点数转换为`BigDecimal`,以及进行加减乘除、取模等运算的方法。 `BigDecimal`类提供了丰富的API,如`...

    BigDecimal.js.zip

    在JavaScript编程语言中,处理大型数字的精确计算是一项挑战,因为JavaScript的内置Number类型在进行大整数或高精度浮点数运算时容易出现精度损失。为了解决这个问题,开发者通常会引入第三方库,比如"BigDecimal.js...

    java BigDecimal操作

    在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...

    JavaScript 精确计算(2)

    标题"JavaScript 精确计算(2)"暗示了这是一个系列教程的第二部分,专注于如何在JavaScript中实现精准的数学计算。 在这个主题中,我们可以探讨以下几个关键知识点: 1. **浮点数的不精确性**:JavaScript中的...

    bigdecimal转integer.docx

    `BigDecimal` 用于处理精确的浮点数运算,适合财务或金融计算,因为它可以避免浮点数计算中的精度问题。而 `Integer` 是 Java 中的整数类型,它只能存储整数值。在某些情况下,我们可能需要将 `BigDecimal` 对象转换...

    Java 精确计算-double-float-String

    标题中的"Java 精确计算 - double-float-String"指向的是Java中处理浮点数(double和float)以及字符串表示的数值时可能遇到的精度问题,以及如何通过特定方法实现精确计算。描述中提到的链接指向了一个具体的博客...

    使用BigDecimal进行精确运算(实现加减乘除运算)

    在实际使用BigDecimal时,要确保理解其性能开销,因为它比浮点数运算慢得多,适用于需要精确计算的场景,如财务计算、精确比例计算等。在不需要精确计算的场合,仍然推荐使用float和double以获取更好的性能。

    BigDecimal计算

    在Java编程语言中,`BigDecimal`类是用于表示和操作大数(通常涉及财务或精确数学计算)的重要工具。由于浮点数(如`float`和`double`)在计算机中是以近似值存储的,这可能导致计算结果的不精确性,尤其是在进行...

    BigDecimal向Double转换

    它可以处理非常大的数字以及需要精确计算的场景,例如财务计算中常见的货币值。 ### 1.2 BigDecimal的主要用途 - **金融计算**:由于货币计算通常需要非常高的精度,BigDecimal非常适合这类应用场景。 - **科学...

    js_bigdecimal_1_0_1.zip

    BigDecimal是一种可以表示任意精度的十进制浮点数的类,主要用于财务、货币和其他需要精确计算的场景。在Java中,有内置的`java.math.BigDecimal`类,但JavaScript原生并不支持这样的数据类型。因此,"js_bigdecimal...

    BigDecimal加减乘除计算.pdf

    在Python中虽然没有直接对应的类,但理解`BigDecimal`的工作原理对于处理需要精确计算的场景是很有帮助的。本篇文章将详细探讨`BigDecimal`在加减乘除运算中的应用及其注意事项。 首先,`BigDecimal`对象的初始化有...

    Java中BigDecimal类的简单用法

    }}这段代码中,我们使用了BigDecimal的乘法操作multiply(),它允许我们进行精确的乘法计算,避免了浮点数计算中的误差。同样,我们也使用了减法操作subtract(),来进行精确的减法运算。在实际开发中,BigDecimal类...

    java-BigInteger-BigDecimal类源码

    1. **高精度浮点数**:与`BigInteger`类似,`BigDecimal`适用于需要精确浮点数计算的场景,如财务和科学计算。它避免了双精度浮点数(`double`)可能出现的舍入误差。 2. **精度控制**:`BigDecimal`的精度可以通过...

    实例025 - 更精确地使用浮点数

    例如,Python有`decimal`模块用于高精度浮点数运算,而Java提供了`BigDecimal`类。 5. **工具的使用**: 标签中的“工具”可能指的是用来检查和处理浮点数精度的工具,比如`printf`格式化输出在C语言中可以控制...

Global site tag (gtag.js) - Google Analytics