|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"四捨五入"
●概説
四捨五入をして結果を出す関数を作りました.切り上げ,切り捨て関数も作
りました.
●使い方
Shisha(数,n)
とすると,小数点第n位以下四捨五入された値が返されます.以下に示したよ
うに,nに負の値を入れれば,小数点以上でもいけます.
切り上げ,切り捨ても同様に
Kiriage(数,n)
Kirisute(数,n)
です.
●nの例
12.345 → 12.35 n=3
12.345 → 12.3 n=2
12.345 → 12 n=1
17,345 → 17,350 n=0
17,345 → 17,300 n=-1
17,345 → 17,000 n=-2 (100の位を四捨五入."100"のゼロの数は2ゆえ,n
は-2)
●注意
Round関数は,日本語の「四捨五入」と若干異なるため,使用していませ
ん.Shishaは,日本語通りの「四捨五入」が行えます.
切り上げで,以下のような問題があります.
例えば,小数点第1位以下切り上げで,
12 → 12.0
になった方がいいと思います.そこで,小数点以下が0かどうかの判断をする
のですが,変数の値が完全に0に等しくなるのは難しかったので,0.0001以下
は0だと判断させました.精度を上げたい方は,ここを調節してください.
------以下がコードです.function powerも使用します.-----------
//=========================================power
function power(x:double; y:double):double; {xのy乗}
begin
If x=0 then
begin
Result := 0; // 0^0 = 1 までは考えてません.
end
else
begin
Result := exp(y*ln(x));
end;
end;
//==========================================四捨五入
function Shisha(x: Double; n: Integer): Double;
begin
x := x*power(10,n-1);
x := Trunc(x + 0.5);
Result := x*power(10,1-n);
end;
//==========================================切り捨て
function Kirisute(x: Double; n: Integer): Double;
begin
x := x*power(10,n-1);
x := Trunc(x);
Result := x*power(10,1-n);
end;
//==========================================切り上げ
function Kiriage(x: Double; n: Integer): Double;
begin
x := x*power(10,n-1);
If Frac(x) > 0.0001 then // 0.0001以下は0に等しいと考えた
x := Trunc(x) + 1
else
x := Trunc(x);
Result := x*power(10,1-n);
end;
----------------------------------------------------
------
98/2/5(Thu) pm05:23 BZQ00131 はんばあぐ
Original document by はんばあぐ 氏 ID:(BZQ00131)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|