浮点数的注意事项:
1.要注意浮点数不能用于精确的求等:
===========================================================================
2.海盗喝酒
1.要注意浮点数不能用于精确的求等:
package com.aiqiongdiao;
/**
* 啤酒:2.3
* 饮料:1.9
* 共花:82.3
* 饮料<啤酒
* 买的多少啤酒?
* @author lyb
*
*/
public class Main {
public static void main(String[] args){
/**
* 浮点全等:有风险 System.out.println(0.2+0.1==0.3);【Flase:二进制的问题】
* 解决方式!!: 方式一: System.out.println(Math.abs(0.2+0.1-0.3)<1E-10);
* 方式二: if(a*23+b*19==823)
*/
for(int a=0;a<100;a++){
for(int b=0;b<100;b++){
// if(a*2.3+b*1.9==82.3){
if(Math.abs(a*2.3+b*1.9-82.3)<1E-10){
System.out.println(a+" "+b);
}
}
}
}
}
===========================================================================
2.海盗喝酒
package com.aiqiongdiao;
/**
* 20个人或以内在喝酒
* 开一瓶平分,倒下几个
* 第4瓶后船长也倒下
* 船长喝了1瓶
* 推断开始几个人,每轮剩下几个人
* 20 5 4 2 0
* @author lyb
*
*/
public class Main {
public static void main(String[] args) {
/**分数不能用在浮点数精确的比较
* 所以用:
* 1.相减值太小
* 2.化去分母
*/
//剩下的人数
for(int a=20;a>1;a--){
for(int b=a-1;b>1;b--){ //b要小于a
for(int c=b-1;c>1;c--){
for(int d=c-1;d>1;d--){
//注意部分:此处分数不能精确相等--改写成整数相乘
if(b*c*d+a*c*d+a*b*d+a*b*c==a*b*c*d){
System.out.println(a+","+b+","+c+","+d);
}
}
}
}
}
}
}
===============================
未清楚知识点日后补上~