文档章节

金额,数值精确推荐BigDecimal,请勿使用double,float

尾生
 尾生
发布于 2016/08/10 15:12
字数 351
阅读 8
收藏 1

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
博文 137
码字总数 54687
作品 0
杭州
程序员
金融系统中正确的金额计算及存储方式

image 昨天微信群里在讨论金额计算及存储的话题,今天特来结贴一下。 经典的精度丢失问题 Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面的示例。 上面的程序输出结果是...

架构之路
2017/12/01
0
0
计算金额 财务计算 精确运算 BigDecimal用法详解

一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算...

jerry__sun
2016/07/07
581
1
java.math.BigDecimal保留两位小数,保留小数,精确位数

java保留两位小数问题: 方式一(四舍五入形式保留两位小数,注意模式ROUNDHALFUP): 四舍五入 double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2, BigD...

vshcxl
2016/10/27
2.2K
0
如果要求精确的答案,请避免使用float和double

float和double类型的主要设计目的是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果...

目翟
2013/11/19
0
3
如果需要精确的答案,请避免使用float和double

float和double类型主要是为了科学计算和工程计算而设计的。它们执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的。它们并没有提供完全精确的结果。 ...

ksfzhaohui
2012/12/13
0
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部