金额,数值精确推荐BigDecimal,请勿使用double,float
博客专区 > 尾生 的博客 > 博客详情
金额,数值精确推荐BigDecimal,请勿使用double,float
尾生 发表于1年前
金额,数值精确推荐BigDecimal,请勿使用double,float
  • 发表于 1年前
  • 阅读 5
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: BigDecimal它可以表示任意精度的小数,使用BigDecimal会占用很大的开销,不适合大规模的数学计算。设计它的目的是用来精确地表示小数,所以我们可以用它来表示货币和金额的计算。

package com.text.java;

import java.math.BigDecimal;

/**
 * <p class="detail">
 * 功能:支付数字计算误差
 * </p>
 * @ClassName: PayDouble
 * @version V1.0  
 * @date 2016-8-10
 * @author wuxw
 */
public class PayDouble {
    
    public static void main1(String[] args) {  
        float f = 0.1f;  
        float sum = 0;  
        for( int i=0; i<1000000; i++)  
        {  
            sum += f;  
        }  
        System.out.println(sum);  
        // 输出:100958.34 而不是1000000
    }  
    
    //输出
    /**
     * <p class="detail">
     * 功能:0.29  
            28
     * </p>
     * @author wuxw
     * @param args
     * @throws
     */
    public static void main2(String[] args) {  
        double d = 29.0 * 0.01;  
        System.out.println(d);  
        System.out.println((int) (d * 100));  
    }
    
    
    public static void main(String[] args) {
         BigDecimal b1 = new BigDecimal(Double.toString(0.01));   
         BigDecimal total = new BigDecimal(Double.toString(0));   
         for( int i=0; i<1000000; i++)  
         {  
             total=total.add(b1);  
         }  
         System.out.println("BigDecimal total="+total);
         // 输出: 10000.00
    }
}

  1. BigDecimal(int)                 创建一个具有参数所指定整数值的对象。  
  2. BigDecimal(double)        创建一个具有参数所指定双精度值的对象。  
  3. BigDecimal(long)             创建一个具有参数所指定长整数值的对象。  
  4. BigDecimal(String)          创建一个具有参数所指定以字符串表示的数值的对象。

BigDecimal 的运算方式 不支持 + - * / 这类的运算 它有自己的运算方法:

  1. BigDecimal add(BigDecimal augend) 加法运算  
  2.     BigDecimal subtract(BigDecimal subtrahend) 减法运算  
  3.     BigDecimal multiply(BigDecimal multiplicand) 乘法运算  
  4.     BigDecimal divide(BigDecimal divisor) 除法运算  
共有 人打赏支持
粉丝 15
博文 123
码字总数 52010
×
尾生
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: