易截截图软件、单文件、免安装、纯绿色、仅160KB

Effective Java读书笔记

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还有个额外的好处就是他允许你完全控制舍入,每当一个操作涉及


相关文档:

java入门

 Java学习从入门到精通 
一、 JDK (Java Development Kit) 
JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的J ......

sql 2005 存储过程分页 java 代码

 create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',         
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列 ......

Java 重载与重写

 在JAVA中:
  1. 函数重载是一个类中声明了多个同名的方法,但有不同的参数个数和参数类型。
  2. 函数重构是指在子类中声明与父类同名的方法,从而覆盖了父类的方法。重构解决了子类与父类的差异问题。
例子如下:
//重载
class A {
public d (){};
public d (q){};
public d (q,w){};
}
//重写 ......

java中的一个MyPoint方法

设计一个Circle类,其属性为原点(类型为类MyPoint)和半径,并为此类编写以下三个方法:
一、计算圆的面积的calArea()方法;
二、计算周长的calLength()方法;
三、boolean inCircle(MyPoint mp)方法,功能是测试作为参数的某个点是否在当前对象圆内(圆内,包括圆上返回true,在圆外返回false)。
程序:
clas ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号