为了提供公司的财务信息化,公司A上线了一套自主研发的财务系统,上班第一天,财务C姐就发现了情况不对:几项支出都对,但支出总和一直为0,赶紧向大老板报告。大老板勃然大怒,责令技术部门今天必须解决,小B负责了这个模块出现了问题,被技术总监大骂一通,泽明中午吃饭前必须解决,否则不用吃饭了,可以直接滚蛋了!

小B慌了,失业的话,下个月的房租就没有着落了,感觉拉出这段代码进行调试:

    public static void main(String[] args) {
BigDecimal cost1=new BigDecimal("1024");
BigDecimal cost2=new BigDecimal("2048");
BigDecimal cost3=new BigDecimal("3072");
BigDecimal cost4=new BigDecimal("4096");
BigDecimal total=BigDecimal.ZERO;
total.add(cost1);
total.add(cost2);
total.add(cost3);
total.add(cost4);
System.out.println(total);
}

打印结果为:0

是不是没创建总额对象的问题?赶紧改改:

    public static void main(String[] args) {
BigDecimal cost1=new BigDecimal("1024");
BigDecimal cost2=new BigDecimal("2048");
BigDecimal cost3=new BigDecimal("3072");
BigDecimal cost4=new BigDecimal("4096");
BigDecimal total=new BigDecimal("0");
total.add(cost1);
total.add(cost2);
total.add(cost3);
total.add(cost4);
System.out.println(total);
}

结果仍然为:0

考虑到下个月要不要流落街头的问题,小B赶紧向公司的技术大神扫地僧请教,在一个月零食伺候的诱惑下,扫地僧放下手头的<代码大全2>,扫了一眼代码,动了动手指。

扫地僧:"好了,你运行一下吧!"。于是又拿起了<代码大全2>看了起来。

小B 赶紧运行了一下,计算结果正确了,他瞅了瞅代码,代码没怎么变样呀?

    public static void main(String[] args) {
BigDecimal cost1=new BigDecimal("1024");
BigDecimal cost2=new BigDecimal("2048");
BigDecimal cost3=new BigDecimal("3072");
BigDecimal cost4=new BigDecimal("4096");
BigDecimal total=BigDecimal.ZERO;
total=total.add(cost1);
total=total.add(cost2);
total=total.add(cost3);
total=total.add(cost4);
System.out.println(total);
}

小B暗想:“一个月的零食呀,太了黑。可是我的程序和扫地僧一样呀,为什么他的程序能得出正确的结果?而我的就是0呢?不行,我得问出缘由,不能白白浪费了一次请教的机会!”

于是小B虚心向扫地僧请教,扫地僧看在一个月零食的面子上,停下来给菜鸟小B讲解。

扫地僧:“记不记的我给你讲过,String是不可变的?”

小B:“记得,记得,您老讲过,字符String的类是final修饰的,不可改变,字符的拼接是产生新的字符而不是改变原来的值。”

扫地僧:“孺子可教也,其实如BigDecimal,BigInteger,Integer,Long,Short,Byte,Character,Boolean,Float和Double的实例也是不可变的。我们不能修改现有实例的值,对这些类型的操作将返回新的实例”。

小B:“那为什么它这样设计呢?不是很容易让大家犯错了吗?”

扫地僧:“起先,不可变类型看起来可能很不自然,但

是它们具有很多胜过与其向对应的可变类型的优势。不可变类型更容易设计、实

现和使用;它们出错的可能性更小,并且更加安全。”

小B:“您老真厉害!”

扫地僧:“你还年轻,悟性也好,慢慢加油吧!”

这次事件起的突然,解决的也比较顺利,财务系统也运行良好了。小B的职位也保住了,为了答谢扫地僧,小B也包圆了扫地僧一个月的零食,借此机会,小B也拉近了和扫地僧的距离,从扫地僧身上学到了很多没有掌握的东西。

会计的疑惑--BigDecimal的秘密的更多相关文章

  1. 简单BigDecimal运算精度

    项目中遇到了数值运算,如网上所写的,一般有这几个方法: /** * 提供精确的加法运算. * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ publ ...

  2. [置顶] 请听一个故事------>你真的认为iPhone只是一部手机?苹果惊天秘密!!

    在网上看到的一篇小说,感觉有点意思,转载过来大家一起围观下,作者很幽默很风趣. 导读:iPhone的隐藏功能!Jobs的军方身份!图灵服毒自杀的传奇故事!中兴华为的神秘背景! 你真的认为iPhone只 ...

  3. 请听一个故事------>你真的认为iPhone只是一部手机?苹果惊天秘密!!

    在网上看到的一篇小说,感觉有点意思,转载过来大家一起围观下,作者很幽默很风趣. 导读:iPhone的隐藏功能!Jobs的军方身份!图灵服毒自杀的传奇故事!中兴华为的神秘背景! 你真的认为iPhone只 ...

  4. Char、float、Double、BigDecimal

    Char初识 char: char类型是一个单一的 16 位 Unicode 字符 char 在java中是2个字节("字节"是byte,"位"是bit ,1 ...

  5. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  6. 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密

    0x00 前言 在匹夫的上一篇文章<匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置>的最后,匹夫以总结和后记的方式涉及到一部分迭代器的知识.但是觉得还是不够过瘾,很多需要说清楚 ...

  7. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  8. 网站的SEO以及它和站长工具的之间秘密

    博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...

  9. Atitit 图像处理的心得与疑惑 attilax总结

    Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...

随机推荐

  1. 啥?修改下 URL 就能高速下载网盘资源和百度文库?

    下载百度资源和百度文库资料是大家常有的需求,不过多数方法都需要下载些软件什么的才能实现. 今天给大家介绍一个简单方法,修改下 URL 就能直接在浏览器中高速下载网盘资源和百度文库资料. [下载百度网盘 ...

  2. RDIFramework.NET敏捷开发框架通过SignalR技术整合即时通讯(IM)

    1.引言 即时通讯(IM)是RDIFramework.NET敏捷开发框架全新提供的一个基于Web的即时通讯.内部聊天沟通的工具.界面美观大方对于框架内部进行消息的沟通非常方便.基于RDIFramewo ...

  3. nodejs简单抓包工具

    就是简简单单写程序的我为什么需要抓包? 其实在平时写demo的时候需要用到一些图片和文本的资源的,但是需求量比较大,这个时候就想去网站上面直接复制啊,然后图片另存为啊,什么的一系列繁琐的操作. 但是现 ...

  4. python相关,各种命令集合

    PS: cmd必须管理员身份运行 python版本 2.7  可能会出现编码问题:在 Lib/site-packages 新建文件 sitecustomize.py import sys  sys.s ...

  5. 通过类来实现多session 运行

    #xilerihua import tensorflow as tf import numpy as np import os from PIL import Image import matplot ...

  6. Liunx软件安装之Tomcat

    一.Tomcat 安装 1.1 yum 安装 1) 安装 tomcat 基础服务 sudo yum -y install tomcat 2) 安装管理界面 sudo yum -y install to ...

  7. maven构建springmvc过程中遇到的一些问题

    1.spring的配置文件,xsd不要配版本号 2.spring配置datasource的三种方式 3.springmvc与spring扫描注解的冲突 4.NoClassDefFoundError: ...

  8. E-Explorer_2019牛客暑期多校训练营(第八场)

    题意 n个点,m条边,u,v,l,r表示点u到点v有一条边,且只有编号为\([l,r]\)的人能通过,问从点1到点n有哪些编号的人能通过 题解 先对\(l,r\)离散化,用第七场找中位数那题同样的形式 ...

  9. SPOJ - QTREE5 Query on a tree V 边分治

    题目传送门 题意:给你一棵树, 然后树上的点都有颜色,且原来为黑,现在有2个操作,1 改变某个点的颜色, 2 询问树上的白点到u点的最短距离是多少. 题解: 这里用的还是边分治的方法. 把所有东西都抠 ...

  10. codeforces 807 E. Prairie Partition(贪心+思维)

    题目链接:http://codeforces.com/contest/807/problem/E 题意:已知每个数都能用x=1 + 2 + 4 + ... + 2k - 1 + r (k ≥ 0, 0 ...