直接使用double計算會衍生的小數點不規則問題,
(參考show_double() method )
此篇有較詳細的說明, http://www.ej38.com/showinfo/java-133092.html
因此有BCD碼的產生,
不止Java會發生,其他程式語言對浮點數也會有相同狀況,
(老師應該想讓大家瞭解這樣的情形)
需使用四捨五入或BigDecimal解決幫助使用工程上或科學上運算的問題。
程式如下(仍保留部分原作者原始碼):
半徑與PI值仍是設定double,
回傳圓周長的型態也是double
---------------------------------------------------------------------------
import java.math.BigDecimal;
class M9816104
{
double pi;
double radius,width,height;
double diagonal ()
{
return Math.sqrt (width*width+height*height);
}
// 新增1
double perimeter ()
{
return radius*2*pi;
}
// 新增2
double perimeter (double radius , double pi)
{
BigDecimal b1 = new BigDecimal(Double.toString(radius));
BigDecimal b2 = new BigDecimal(Double.toString(pi));
return b1.multiply(b2).doubleValue()*2;
}
void show_perimeter ()
{
System.out.println ("圓周長="+(radius*2*pi));
}
// 新增3
void show_double ()
{
int i;
for(i=0;i<5;i++)
{
System.out.println(i+"==>"+i*1.1);
}
/*
會產出以下結果
0==>0.0
1==>1.1
2==>2.2
3==>3.3000000000000003
4==>4.4
*/
}
public static void main (String[] X)
{
M9816104 test = new M9816104();
test.radius=5.0;
test.pi=3.14;
test.width=4.0;
test.height=3.0;
test.show_perimeter ();
System.out.println ("矩型對角線="+test.diagonal());
System.out.println ("(1)perimeter="+test.perimeter());
System.out.println ("(2)perimeter="+test.perimeter(test.radius,test.pi));
test.show_double();
}
}
學習發現 往人少的地方走
Saturday, January 09, 2010
Subscribe to:
Posts (Atom)