BigDecimal及精度算法

一、包介绍

  java.math,提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。

  BigInteger 除提供任意精度之外,它类似于 Java 的基本整数类型,因此在 BigInteger 上执行的操作不产生溢出,也不会丢失精度。除标准算法操作外,

  BigInteger 还提供模 (modular) 算法、GCD 计算、基本 (primality) 测试、素数生成、位处理以及一些其他操作。

  BigDecimal 提供适用于货币计算和类似计算的任意精度的有符号十进制数字。BigDecimal 允许用户对舍入行为进行完全控制,并允许用户选择所有八个舍入模式。 Related Documentation

For overviews, tutorials, examples, guides, and tool documentation, please see:

  • ##### REFER TO NON-SPEC DOCUMENTATION HERE #####

-->

二、BigDecimal

  

public class BigDecimal extends Number implements Comparable<BigDecimal> {}

  BigDecimal继承自Number类:

package java.lang;

/**
 * The abstract class Number is the superclass of classes BigDecimal, BigInteger,Byte, Double, Float,Integer, Long, andShort.
 * @author    Lee Boynton
 * @author    Arthur van Hoff
 * @version 1.30, 11/17/05*/
public abstract class Number implements java.io.Serializable {
    public abstract int intValue();
    public abstract long longValue();
    public abstract float floatValue();
    public abstract double doubleValue();
    public byte byteValue() {
      return (byte)intValue();
    }
    public short shortValue() {
      return (short)intValue();
    }
    private static final long serialVersionUID = -8742448824652078965L;
}

  Number类是BigDecimal, BigInteger,Byte, Double, Float,Integer, Long, andShort的父类,作者是Lee Boynton和Arthur van Hoff。

三、方法

  1、public int scale() :返回此BigDecimal的标度。

    如果是0或者正数,则标度是小数点后的位数;

    如果是负数,则将改数的非标度值乘以10的负scale次幂,例如-3的标度是指非标度值乘以1000.

  2、加法:BigDecimal  add(BigDecimal augent) 返回一个 BigDecimal,其值为 (this + augend),其标度为 max(this.scale(), augend.scale())

    注:augent,被加数。

  3、除法:BigDecimal divide(BigDecimal divisor)

  4、乘法:BigDecimal multiply(BigDecimal multiplicand)

时间: 2024-08-28 03:08:18

BigDecimal及精度算法的相关文章

BigDecimal的精度舍入模式详解

BigDecimal舍入模式介绍: 舍入模式在java.math.RoundingMode 里面: RoundingMode.CEILING :向正无限大方向舍入的舍入模式.如果结果为正,则舍入行为类似于 RoundingMode.UP:如果结果为负,则舍入行为类似于 RoundingMode.DOWN.注意,此舍入模式始终不会减少计算值 输入数字 使用CEILING舍入模式将数字舍入为一位数 5.5 6 2.5 3 1.1 2 1.0 1 -1.0 -1 -1.1 -1 -1.6 -1 -2.

hibernate中设置BigDeCimal的精度

1 @Column(precision = 12, scale = 2) 在MySQL数据库中的精度为:

BigDecimal 小数 浮点数 精度 财务计算

最常用法示例 构造方法 //测试构造方法 System.out.println("double类型的1.22:" + new BigDecimal(1.22));//1.2199999999999999733546474089962430298328399658203125 System.out.println("String类型的1.22: " + new BigDecimal("1.22"));//1.22 System.out.printl

Java中关于 BigDecimal 的一个导致double精度损失的&quot;bug&quot;

背景 在博客 恶心的0.5四舍五入问题 一文中看到一个关于 0.5 不能正确的四舍五入的问题.主要说的是 double 转换到 BigDecimal 后,进行四舍五入得不到正确的结果: public class BigDecimalTest { public static void main(String[] args){ double d = 301353.05; BigDecimal decimal = new BigDecimal(d); System.out.println(decima

BigDecimal.ROUND_HALF_EVEN (银行家算法)

BigDecimal.ROUND_HALF_EVEN 银行家算法 四舍六入,五看前一位是偶数舍,奇数进位 5.5 62.5 21.6 21.1 11.0 1-1.0 -1-1.1 -1-1.6 -2-2.5 -2-5.5 -6 原文地址:https://www.cnblogs.com/pastjx/p/12125232.html

BigDecimal类(高精度小数)

位置:java.math.BigDecimal 作用:提供高精度小数数据类型及相关操作 一.基本介绍 BigDecimal为不可变的.任意精度的有符号十进制数,其值为(unscaledValue * 10-scale)其中,unscaledValue(非标度值)为任意精度的整数.scale(标度)为32位整型(可为负) 提供以下操作:算术.标度操作.舍入.比较.哈希算法和格式转换. 用户能通过提供MathContext对象完全控制BigDecimal的舍入行为(也可使用类内提供的8种舍入模式).

微信红包算法

微信红包有多种玩法,其中一种就是指定金额.人数(m),拆红包的人收到的金额是随机,收到的金额保留两位小数,至少有一分,所有人的红包加起来等于指定金额. 我想到一种做法就是:将指定金额放大100倍,也就是变成单位"分",这时金额就是整数了,设为n,从1到n这个整数区间随机抽取m(是人数)个整数,这样1到n的整数区间就分成了m或m+1(这种情况,最后的两个区间合成一个区间)个区间. 比如输入金额1.00元,人数m=3,n=100 * 1.从1到100之间随机选中的三个整数为15.42.88

Java BigDecimal和double

BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作.BigDecimal类的常用方法如表所示. BigDecimal类的常用方法 序号 方    法 类型 描    述 1 public BigDecimal(double val) 构造 将double表示形式转换 为BigDecimal 2 public BigDecimal(int va

Java 中浮点数---------BigDecimal和double(初探)

为什么要使用 bigdecimal? 借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合.但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦. BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale