double+if....else 語(yǔ)句怎么改為正確
public class Code{
? public static void main(String[] args){
? ? ? ? double a = 3.0;
? ? ? ? double b = 2.9;
? ? if(a- b == 0.1){
? ? ? System.out.println("OK");
? ? ? }else{
? ?System.out.println("ERRO");
? ? ? }
? ?}
}
2017-09-05
首先呢,一定會(huì)報(bào)錯(cuò),因?yàn)槟愕淖兞繉?xiě)錯(cuò)了……
再有呢,如果改對(duì)了,也一定打印出來(lái)的是“ERRO”……
一般不會(huì)用double做計(jì)算結(jié)果的判定,因?yàn)樗粫?huì)給出精準(zhǔn)計(jì)算結(jié)果。
通常都是用的是BigDecimal類(lèi)型
不然就有可能是0.98999289898892899之類(lèi)的(我瞎寫(xiě)的,主要是舉例……)
再有,計(jì)算機(jī)計(jì)算的時(shí)候是利用二進(jìn)制算的,特別對(duì)0.1,即使是正常計(jì)算,它自己也不知道0.1是什么,因?yàn)槎M(jìn)制沒(méi)法表示,所以結(jié)果只能是逼近,但不是0.1。
我自己竟然還試了試……除了3.0-3.0 == 0.0 其他好像都不能成功,大家可以試試……
訥訥, 所以,可以用BigDecimal類(lèi)型試試……
2017-09-05
public class Code{
?public static void main(String[] args){
? ? ? ?double a = 3.0;
? ? ? ?double b = 2.9;
? ?if((a - b) == 0.1){
? ? ?System.out.println("OK");
? ? ?}else{
? System.out.println("ERRO");
? ? ?}
? }
}
/*使用了未定義的變量 v5 v6*/