`
xinklabi
  • 浏览: 1591322 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

BigDecimal类 -double精度内处理不了时候可以使用

    博客分类:
  • Java
 
阅读更多

BigDecimal类 
  双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。 

  BigDecimal类的主要构造器和方法 

  构 造 器描 述 

  BigDecimal(int)创建一个具有参数所指定整数值的对象。 

  BigDecimal(double)创建一个具有参数所指定双精度值的对象。 

  BigDecimal(long)创建一个具有参数所指定长整数值的对象。 

  BigDecimal(String)创建一个具有参数所指定以字符串表示的数值的对象。 

  方 法描 述 

  add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。 

  subtract(BigDecimal)BigDecimal对象中的值相减,然后返回这个对象。 

  multiply(BigDecimal)BigDecimal对象中的值相乘,然后返回这个对象。 

  divide(BigDecimal)BigDecimal对象中的值相除,然后返回这个对象。 

  toString()将BigDecimal对象的数值转换成字符串。 

  doublue()将BigDecimal对象中的值以双精度数返回。 

  floatValue()将BigDecimal对象中的值以单精度数返回。 

  longValue()将BigDecimal对象中的值以长整数返回。 

  intValue()将BigDecimal对象中的值以整数返回。 

  注意,由于一般数值类型,例如double,不能准确地代表16位有效数以上的数字,在使用BigDecimal时,应用BigDecimal(String)构造器创建对象才有意义。另外,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。 

  构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。关于构造器概念和编写技术,将在本书第6章详细介绍。 

  下面讨论BigDecimal的一些常用例子: 

 //完整程序例子在本书配套资源目录Ch5中名为BigDecimalTestApp.Java 
  //创建BigDecimal对象 
  BigDecimal bigNumber = new BigDecimal("89.1234567890123456789"); 
  BigDecimal bigRate = new BigDecimal(1000); 
  BigDecimal bigResult = new BigDecimal(); //对象bigResult的值为0.0 
  //对bigNumber的值乘以1000,结果 赋予bigResult 
  bigResult = bigNumber.multiply(bigRate); 
  System.out.println(bigResult.toString()); 
  //或者System.out.println(bigResult); 
  //显示结果:89123.4567890123456789000 
  //以双精度数返回bigNumber中的值 
  double dData = bigNumber.doublue(); 
  System.out.println(dData); //结果:89.12345678901235 

  注意使用方法doublue()将对象bigNumber中的值以双精度数值返回时,将丢失数据的准确性。使用其他方法,如xxxValue()时均存在这个问题,使用时必须慎重。 

  <!--[if !vml]--><!--[endif]-->3W BigDecimal用来对超过16有效位以上的数值进行运算和操作。所有的算术运算都通过调用其相应的方法进行。创建一个超过16有效位数的对象时,运用BigDecimal(String)才可避免丢失数字的精确度。 

  BigDecimal和格式化 

  由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。 


java四舍五入 


package Test; 

import java.math.BigDecimal; //引入这个包 

public class Test { 
public static void main(String[] args) { 

   double i = 3.856; 

   // 舍掉小数取整 
   System.out.println("舍掉小数取整:Math.floor(3.856)=" + (int) Math.floor(i)); 

   // 四舍五入取整 
   System.out.println("四舍五入取整:(3.856)=" 
     + new BigDecimal(i).setScale(0, BigDecimal.ROUND_HALF_UP)); 

   // 四舍五入保留两位小数 
   System.out.println("四舍五入取整:(3.856)=" 
     + new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP)); 

   // 凑整,取上限 
   System.out.println("凑整:Math.ceil(3.856)=" + (int) Math.ceil(i)); 

   // 舍掉小数取整 
   System.out.println("舍掉小数取整:Math.floor(-3.856)=" + (int) Math.floor(-i)); 
   // 四舍五入取整 
   System.out.println("四舍五入取整:(-3.856)=" 
     + new BigDecimal(-i).setScale(0, BigDecimal.ROUND_HALF_UP)); 

   // 四舍五入保留两位小数 
   System.out.println("四舍五入取整:(-3.856)=" 
     + new BigDecimal(-i).setScale(2, BigDecimal.ROUND_HALF_UP)); 

   // 凑整,取上限 
   System.out.println("凑整(-3.856)=" + (int) Math.ceil(-i)); 

转载:http://blog.sina.com.cn/s/blog_5109612b0100fvia.html 

分享到:
评论

相关推荐

    BigDecimal向Double转换

    在Java编程语言中,BigDecimal是一种用于处理高精度数值的数据类型,尤其适用于金融计算等领域,因为它可以提供不受限的小数位数精度以及精确的数学运算能力。然而,在某些情况下,我们可能需要将BigDecimal类型的值...

    BigDecimal-CPP-master.zip

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

    Java Double 精度问题总结

    1. **使用BigDecimal类**:为了处理需要高精度的计算场景,可以使用 `BigDecimal` 类来代替 `double` 类型。`BigDecimal` 类提供了任意精度的算术运算,并且可以自定义所需的精度位数。 ```java BigDecimal a = ...

    BigDecimal类

    BigDecimal 类可以与 NumberFormat 类结合使用,用于格式化货币值、百分值等超过 16 位有效数字的数值。首先,创建 BigDecimal 对象,进行 BigDecimal 的算术运算后,分别建立对货币和百分比格式化的引用,最后利用 ...

    java-BigInteger-BigDecimal类源码

    在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,它们分别用于处理大整数和高精度浮点数。这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入...

    java_double_精度

    Java 双精度浮点数精度问题解决方案 Java 中的双精度浮点数(double)类型在进行运算时经常出现精度丢失的问题,这是由于双...使用 BigDecimal 类可以解决 Java 中的双精度浮点数精度问题,从而避免程序处理流程出错。

    java中BigDecimal的操作方法

    在Java编程语言中,BigDecimal是用于处理高精度和可配置精度的十进制数的类。在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文...

    BigDecimal工具类.docx

    在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法,这些方法可以根据不同的参数类型和精度需求进行选择。 首先,让我们来看一下add方法。add方法有三种重载形式,分别是add(double,double)...

    Java 精确计算-double-float-String

    5. **转换类型**:如果需要将`BigDecimal`转换回`double`或`float`,可以使用`doubleValue()`和`floatValue()`方法,但要注意这可能会丢失精度。 在实际开发中,`BigDecimal`的使用可以确保计算结果的准确无误,但...

    bigdecimal

    在Java编程语言中,当我们处理涉及货币、财务或者任何需要高精度计算的场景时,`BigDecimal` 类是非常重要的工具之一。本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### ...

    BigDecimal使用

    BigDecimal 是 Java 中一个用于处理金融和商业应用的类,其主要功能是提供高精度的数字计算。下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。...

    Java中BigDecimal类的简单用法

    使用BigDecimal类可以确保每一分钱都计算得准确。此外,BigDecimal类还支持舍入模式(RoundingMode),在进行除法运算时,如果需要四舍五入或者按照特定规则处理余数,可以通过setScale(int newScale, RoundingMode ...

    Java中BigDecimal类的使用详解

    因此,使用BigDecimal类可以避免浮点数的精度问题,进行精确的数学运算。 一、BigDecimal转换取Double数据 在使用BigDecimal类时,我们需要将Double类型的数据转换为BigDecimal对象。可以使用以下方法实现: ...

    Java中double类型下出现精度计算错误情况下出力方法

     要保证精度就要使用BigDecimal类,而且不能直接从double直接转BigDecimal,要将double转string再转BigDecimal。也就是不能使用BigDecimal(double val) 方法,你会发现没有效果。要使用BigDecimal(String val) 方法...

    ArithmeticUtils-高精度数学运算.pdf

    为了解决这一问题,Java提供了BigDecimal类,它能够表示不可变的任意精度的十进制数。 ArithmeticUtils是一个封装了多种高精度数学运算方法的工具类,它利用了BigDecimal的特性,提供了一系列的加、减、乘、除等...

    BigDecimal的计算

    通过使用 `BigDecimal`,可以避免由于二进制浮点数的有限精度带来的舍入误差问题。 ##### 2. 构造方法与静态工厂方法 `BigDecimal` 提供了多种构造方法以及一些静态工厂方法用于创建实例。例如: - `new BigDecimal...

    Java BigDecimal和double示例及相关问题解析

    在 Java 中,浮点数的表示形式有多种,包括 float 和 double 等,但是这些类型在进行计算时会出现精度问题,而 BigDecimal 则可以解决这种问题。本文将主要介绍 Java 中的 BigDecimal 和 double 的示例及相关问题...

    BigInteger BigDecimal 使用

    `BigDecimal`类则用于处理高精度的浮点数运算,它解决了`float`和`double`类型存在的精度问题。`BigDecimal`的构造方法同样接受字符串,或者可以通过`BigInteger`来创建: ```java BigDecimal bigDec = new ...

    BigDecimal加减乘除计算

    BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...

    BigDecimal 加减乘除运算

    双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是...

Global site tag (gtag.js) - Google Analytics