数值类型的计算,是实际的开发代码过程中,很常用,很简单。
这并不表示没有坑等着我们,谁让我们程序员不是在写Bug,就是在写Bug的过程中呢?
1 基本概念
浮点类型,用于表示有小数部分的数值。
在Java中有两种浮点类型:
float | 4kb | 大约 ± 3.4.02 823 47E+38F(有效位数为6-7位) |
double | 8kb | 大约 ±1.79.97 693 134 862 315 70E+308(有效位数为15位) |
所有浮点数值计算都遵循IEEE 745规范。
三种特殊类型的浮点数值:
一个整数除以0的结果为正无穷大,计算 0/0 或者负数的平方根结果为NaN。
2 代码示例
浮点数相减
// 两个浮点数相减
double subtrahend = 2.0;
double minuend = 1.1;
double remainder = subtrahend - minuend;
System.out.println("两个浮点数相减,2.0减去1.1的结果为:" + remainder);
说明:注意实际输出结果不是0.9,而是:0.8999999999999999
浮点数循环
// 在循环语句中,判断两个浮点数是否相等
for (double i = 0; i != 10 ; i += 0.1) {
System.out.println("循环语句中的浮点数等式比较:" + i);
}
说明:不要在循环语句中,使用浮点数值类型做判断,由于精度丢失,会造成死循环。
大数值计算概率
// 使用BigDecimal数值类型,计算在490个数字中,抽取60个数字的概率
int pickNumber = 60;
int sumTotal = 490;
BigDecimal probability = BigDecimal.valueOf(1);
for (int i = 1; i <= pickNumber; i++){
probability = probability.multiply(BigDecimal.valueOf(sumTotal - i + 1)).divide(BigDecimal.valueOf(i));
}
System.out.println(probability);
说明:输出的结果为 716395843461995557415116222540092933411717612789263493493351013459481104668848
概率值表示为 1 / 716395843461995557415116222540092933411717612789263493493351013459481104668848
大数值类型BigDecimal采用实现的计算方法(add,subtract,multiply,divide)
3 总结
作者简介
一个真的有思想,不穿格子衬衫的程序员。