绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
会计的疑惑--BigDecimal的秘密
2019-12-27 10:22:53

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

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

publicstaticvoid main(String[] args) {

BigDecimal cost1=newBigDecimal("1024");

BigDecimal cost2=newBigDecimal("2048");

BigDecimal cost3=newBigDecimal("3072");

BigDecimal cost4=newBigDecimal("4096");

BigDecimal total=BigDecimal.ZERO;

total.add(cost1);

total.add(cost2);

total.add(cost3);

total.add(cost4);

System.out.println(total);

}

打印结果为:0

 

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

publicstaticvoid main(String[] args) {

BigDecimal cost1=newBigDecimal("1024");

BigDecimal cost2=newBigDecimal("2048");

BigDecimal cost3=newBigDecimal("3072");

BigDecimal cost4=newBigDecimal("4096");

BigDecimal total=newBigDecimal("0");

total.add(cost1);

total.add(cost2);

total.add(cost3);

total.add(cost4);

System.out.println(total);

}

结果仍然为:0

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

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

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

publicstaticvoid main(String[] args) {

BigDecimal cost1=newBigDecimal("1024");

BigDecimal cost2=newBigDecimal("2048");

BigDecimal cost3=newBigDecimal("3072");

BigDecimal cost4=newBigDecimal("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也拉近了和扫地僧的距离,从扫地僧身上学到了很多没有掌握的东西。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

JAVA玩具小屋
创建时间:2019-08-16 16:54:49
分享程序开发方面的小经验,思考一些比较简单易懂的技术问题
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • Yios5092
    栈主

小栈成员

查看更多
  • 栈栈
  • coyan
  • 25minutes
  • ?
戳我,来吐槽~