刚刚遇到个需求,需要对金额求和,上线的时候才知道这时个,这个字段是个小数。

  随手就改了个Double ,然后,跑下,没啥问题,直接上线了

  然后,就fuck 了

  加出一大堆的小数,大概是这样的

package com.venn.demo;

public class DoublePlus {

    public static void main(String[] args) {
double d1 = 0.01;
double d2 = 0.01; for (int i=0; i< 10; i++){
d2 += d1;
System.out.println(d2);
}
}
}

我以为的输出是这样的:

0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11

实际是这样的:

0.02
0.03
0.04
0.05
0.060000000000000005
0.07
0.08
0.09
0.09999999999999999
0.10999999999999999

一脸懵逼的看完一篇博客,似懂非懂的:程序员必知之浮点数运算原理详解

结论就是:

   很多十进制小数在转换成二进制时,并不能精确表示,只能是近似值。

解决办法就是使用BIgDecimal

public static void bigDecimalDemo(){

        BigDecimal b1 = new BigDecimal("0.01");
BigDecimal b2 = new BigDecimal("0.01"); for (int i=0; i< 10; i++){
b2 = b2.add(b1);
System.out.println(b2);
} }

输出如下:

0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11

Java 浮点数相加的更多相关文章

  1. js,java,浮点数运算错误及应对方法

    js,java浮点数运算错误及应对方法 一,浮点数为什么会有运算错误 IEEE 754 标准规定了计算机程序设计环境中的二进制和十进制的浮点数自述的交换.算术格式以及方法. 现有存储介质都是2进制.2 ...

  2. Java浮点数float,bigdecimal和double精确计算的精度误差问题总结

    (转)Java浮点数float,bigdecimal和double精确计算的精度误差问题总结 1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结 ...

  3. Java 浮点数精度丢失

    Java 浮点数精度丢失 问题引入 昨天帮室友写一个模拟发红包抢红包的程序时,对金额统一使用的 double 来建模,结果发现在实际运行时程序的结果在数值上总是有细微的误差,程序运行的截图: 输入依次 ...

  4. js浮点数相加、减、乘、除精确计算

    js 浮点数计算时 ,无缘无辜 后边冒出一堆 小数点………… 貌似js本身的问题,类型不定?????? 只能自己写函数处理..  http://blog.csdn.net/w4bobo/article ...

  5. JAVA浮点数计算精度损失底层原理与解决方案

    浮点数会有精度损失这个在上大学的时候就已经被告知,但是至今完全没有想明白其中的原由,老师讲的时候也是一笔带过的,自己也没有好好琢磨.终于在工作的时候碰到了,于是google了一番. 问题: 对两个do ...

  6. Java 浮点数精确性探讨(IEEE754 / double / float)与 BigDecimal 解决方案

    一.抛砖引玉 一个简单的示例: double a = 0.0; IntStream.range(0,3).foreach(i->a+=0.1); System.out.println(a); / ...

  7. java浮点数剖析

    定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固定位数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数.计算机系统采纳了所谓的浮点数表达方式.这种表达方式利用科学计数法来表达 ...

  8. java大数相加

    import java.math.BigInteger; import java.util.Scanner; public class Bignum{    public static void ma ...

  9. Java大数相加-hdu1047

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1047 题目描述: 题意有点绕,但是仔细的读了后就发现是处理大数相加的问题.注意:输入数据有多组,每组输 ...

随机推荐

  1. android 使用Retrofit2 RxJava 文件上传

    private static void upload(final Context context, final int type, File logFile) { Map<String, Req ...

  2. 查询linux计算机的出口ip

    执行以下命令即可: [root@tkafka ~]# curl http://members.3322.org/dyndns/getip 123.103.9.7 碰到的场景: 微信公众号需要配置ip白 ...

  3. SAS 评分卡开发模型变量统计及输出

    以下代码实现功能: 1.获取10个模型分别使用哪些变量 2.变量所模型使用的次数 3.把上表格输出到EXCEL中 %INCLUDE '00@HEADER.SAS'; %let dir=..\04@Mo ...

  4. C#获取当前路径的七种方法

    //1.获取模块的完整路径. string path1 = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; // ...

  5. PHP chdir函数:改变当前的目录

    PHP chdir函数的作用是改变当前的目录,这里主机吧详细介绍下chdir函数的用法,并列举使用chdir函数的例子. chdir定义和用法: chdir() 函数改变当前的目录. chdir实例: ...

  6. 网页导出PDF文件

    转自-----出道诗人 var downPdf = document.getElementById("exportToPdf"); downPdf.onclick = functi ...

  7. 分享下自己写的一个微信小程序请求远程数据加载到页面的代码

    1  思路整理 就是页面加载完毕的时候  请求远程接口,然后把数据赋值给页面的变量 ,然后列表循环 2 js相关代码  我是改的 onload函数 /** * 生命周期函数--监听页面加载 */ on ...

  8. Linux 开机、重启和用户登录注销、用户管理

    关机&重启命令 shutdown shutdown -h now:表示立即关机 shutdown -h 1:表示1分钟后关机 shutdown -r now:立即重启 halt 就是直接使用, ...

  9. solr搜索

    安装过程: 原料:solr-4.10.3.tgz.tgz 1.1.1 安装步骤 单独一台虚拟机先全部删除:根目录:rm * -rf             cd /usr/local   \  rm ...

  10. HTTP协议规定,客户端的编写

    HTTP协议是网络应用层协议,建立在TCP/IP协议基础上.HTTP协议基于客户/服务器模式,客户端主动发出HTTP请求,服务器接收HTTP请求,返回HTTP响应结果.HTTP协议对HTTP请求,以及 ...