package chape8;
import java.math.BigDecimal;
/**
* 8-48
* 如果想要知道精确的答案,就要避免使用double和float
对于金融行业来说,对数据的严整性要求是很高的,不容半点马虎,
那大家都知道再我们的Java语言里面有两个浮点数类型的变量float和double,
可能大家会认为他们的精度对于金融行业这样对数字敏感的行业来说,已经够用了,
但是在开发当中,我们要尽量少使用double和float,因为让他们精确的表达0.1是不可能的。
那我们如何解决这个问题呢,
答案是使用BigDecimal,int或者long进行货币计算。
在这里对大家的忠告是:
float和double 类型尤其不适合用于货币计算;因为让一个float或者double
精确地表示0.1或者10的任何其他负数次方值,都是不可能的;
* @author lee
*
*/
public class Chape48 {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 来看一个例子
* 你口袋里有1美元(100美分),你打算买糖,糖的价格为10美分20美分
* 30美分等等 一直到1美分 你打算从10美分的开始买,每种价格只买一个
* 那你能买几个糖呢?能找回多少呢?
*/
/* double sum = 1;
int count = 0 ;
for(double x = .10;x<sum;x+=.10)
{
sum-=x;
count++;
}
System.out.println(sum);
System.out.println(count);*/
/**
* 输出结果是
* 0.3999999999999999和3
* 我们用手算一下 100-10-20-30=40
* 那就是说我们还可以买一个.40的糖 那么程序那里错了?
* 错误就在于我们用了double
* 解决办法就是用BigDecimal 或者int 或者long 进行货币的计算
*/
BigDecimal sum1 = new BigDecimal("1");
BigDecimal price = new BigDecimal(".10");
int count1 = 0 ;
for(BigDecimal b = price;sum1.compareTo(b) >=0 ;b=b.add(price))
{
sum1 = sum1.subtract(b);
count1++;
}
System.out.println(sum1);
System.out.println(count1);
/**
* 输出结果0.00和4 这样就正确了
* 关于BigDecimal的方法我们下去再仔细看看;
* 这里要说的是BigDecimal是引用数据类型
*/
/**
* 总而言之: 对于任何要精确答案的计算任务,请不要用double和float,如果你想
* 计算十进制小数点,并且不介意非基本类型带来的不便,那就用BigDecimal;使用
* BigDecimal还有个额外的好处就是他允许你完全控制舍入,每当一个操作涉及舍入的时候
* 它允许你从8种舍入模式中选择一种。如果你正确通过法定要求的舍入行为进行业务计算
* 使用BigDecimal时非常方便的;如果性能十分关键,并且你又不介意自己记录十进制的
* 小数点,而且涉及数值不大,就可以使用int或者long;
* 如果数值范围没有超过9位的十进制数字,可以用int;
如果数值范围没有超过18位的十进制数字,用long
如果范围超过了18位数,那我们必须使用BigDecimal。
*/
}
}
分享到:
- 2009-11-15 19:21
- 浏览 812
- 评论(0)
- 论坛回复 / 浏览 (0 / 1642)
- 查看更多
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
读书笔记:Effective Java中文版第3版笔记
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
读书笔记:Effective Java中文版学习项目
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:Effective Java中文版 第2版
读书笔记:Java练习包括《Java编程思想》《算法》《Effective Java》等
读书笔记:Effective Java中文版第二版示例代码
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:读Effective Java中文版第3版阅读源码测试案列
读书笔记:Effective Java 中文版(第2版)总结 (美)Joshua Bloch 著
读书笔记:Effective.Java中文版(第3版)
安卓艺术开发探索读书笔记,EffectiveJava读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看. 更新说明 v2.2.2 1.增加了一些最近在学习比较好的安卓大神的博客. 2.增加了来自GeniusVJR整理的安卓...
《BookReading:读书笔记》项目是一个专注于Java编程的个人学习资源库,旨在帮助开发者通过阅读和整理书籍来提升自己的技术能力。在这个项目中,你将找到一系列与Java相关的读书笔记,这些笔记涵盖了从基础概念到高级...
loveincode's notes 学习工作中的一些记录,收藏。 操作系统 , 编译原理 , 计算机网络 , 互联网协议... 常用数据结构与算法 Java 实现 数据结构 与 排序算法 ...读书笔记 Effective Java , HTTP权威指南 , Java
java软件笔试题 my notebook 我的笔记本,大部分是在大二大三的时候写的笔记,对于已经毕业的来说可能比较基础甚至naive。...7:读书笔记 thinking in java effective java Android开发艺术探索 Android插件化开发指南
作者HotBitmapGG,源码StudyProject,一款 Material Design 风格的 AndroidRank 干货学习客户端,需要...安卓艺术开发探索读书笔记,EffectiveJava 读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看.