Watch, Follow, &
Connect with Us

For forums, blogs and more please visit our
Developer Tools Community.


Welcome, Guest
Guest Settings
Help

Thread: 四捨五入について


This question is answered. Helpful answers available: 2. Correct answers available: 1.


Permlink Replies: 8 - Last Post: Jul 24, 2016 5:55 PM Last Post By: hiroshi aoyagi
hiroshi aoyagi

Posts: 12
Registered: 12/11/13
四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 21, 2016 1:40 AM
こんにちはー DelphiXE5で開発しています。

OS:windowss7 32bit
delphi:DelphiXE5
DB:oracle11g (Direct Oracle Access にてoracleに接続しています)

数値を円未満四捨五入をしたくRound関数ではなく下記の関数を作成しました。

Function TMain.RoundAct(pATAI: Double): Integer;
begin
if pATAI >= 0 then begin
Result := Trunc(pATAI + 0.5);
end else begin
Result := Trunc(pATAI - 0.5);
end;
end;

引数の値が(pATAI=3214.895)の場合、3215と四捨五入された値で返ってきますが
引数の値が(pATAI=565.5)の場合、565と四捨五入されない値で返ってきました。
xxxx.5の値のデータだと全て、四捨五入されない値で返ってきました。
ただし、565.50001の場合だと四捨五入された値で返ってきます。
Trunc関数の使用方法が悪いのかxxxx.5の値がプラス0.5されずに処理されます。
何かご存知の方がおられましたら、ご教示お願いいたします。

解りずらい質問になってしまいましたが何卒よろしくお願いします。

以上、宜しくお願いします。
igy kk

Posts: 147
Registered: 9/11/03
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 21, 2016 3:44 AM   in response to: hiroshi aoyagi in response to: hiroshi aoyagi
hiroshi aoyagi wrote:
引数の値が(pATAI=3214.895)の場合、3215と四捨五入された値で返ってきますが
引数の値が(pATAI=565.5)の場合、565と四捨五入されない値で返ってきました。
xxxx.5の値のデータだと全て、四捨五入されない値で返ってきました。
ただし、565.50001の場合だと四捨五入された値で返ってきます。
Trunc関数の使用方法が悪いのかxxxx.5の値がプラス0.5されずに処理されます。

ちなみに、以下のコードを実行した場合、どうなりますか?

ShowMessage(
IntToStr(RoundAct(3214.895)) + sLineBreak +
IntToStr(RoundAct(565.5)) + sLineBreak +
IntToStr(RoundAct(565.50001))
);
hiroshi aoyagi

Posts: 12
Registered: 12/11/13
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 21, 2016 6:32 PM   in response to: igy kk in response to: igy kk
igy kkさん レスくださいましてありがとうございます。

コードを実行した結果
3215
566
566

の表示結果になりました。
実行結果では問題ないようですが、引数の渡し方に問題があるのでしょうか?

よろしくお願いします。
igy kk

Posts: 147
Registered: 9/11/03
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 21, 2016 6:59 PM   in response to: hiroshi aoyagi in response to: hiroshi aoyagi
hiroshi aoyagi wrote:
実行結果では問題ないようですが、引数の渡し方に問題があるのでしょうか?

引数の値が(pATAI=565.5)の場合
実際、565.5 ではなく、(計算結果などで)565.499999・・ とかになっているとか。# 丸め誤差
hiroshi aoyagi

Posts: 12
Registered: 12/11/13
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 22, 2016 12:07 AM   in response to: igy kk in response to: igy kk
igy kk wrote:
hiroshi aoyagi wrote:
実行結果では問題ないようですが、引数の渡し方に問題があるのでしょうか?

引数の値が(pATAI=565.5)の場合
実際、565.5 ではなく、(計算結果などで)565.499999・・ とかになっているとか。# 丸め誤差

計算式として、 2000-(2000x0.95x0.755)=565.5
引数に565.5を渡しています。

よろしくお願いします。
igy kk

Posts: 147
Registered: 9/11/03
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 22, 2016 1:52 AM   in response to: hiroshi aoyagi in response to: hiroshi aoyagi
hiroshi aoyagi wrote:
計算式として、 2000-(2000x0.95x0.755)=565.5

丸め誤差 の可能性は、ありませんか?
hiroshi aoyagi

Posts: 12
Registered: 12/11/13
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 22, 2016 2:33 AM   in response to: igy kk in response to: igy kk
igy kk wrote:
hiroshi aoyagi wrote:
計算式として、 2000-(2000x0.95x0.755)=565.5

丸め誤差 の可能性は、ありませんか?

計算を再度確認しましたが565.5となり、丸め誤差の可能性はすくないと思います

よろしくお願いします。
igy kk

Posts: 147
Registered: 9/11/03
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 22, 2016 2:48 AM   in response to: hiroshi aoyagi in response to: hiroshi aoyagi
hiroshi aoyagi wrote:
igy kk wrote:
hiroshi aoyagi wrote:
計算式として、 2000-(2000x0.95x0.755)=565.5

丸め誤差 の可能性は、ありませんか?

計算を再度確認しましたが565.5となり、丸め誤差の可能性はすくないと思います

では、

引数の値が(pATAI=565.5)の場合、565と四捨五入されない値で返ってきました。

これを再現できるコードを提示してみるのは、いかがですか?

あるいは、このとき、RoundActの最初のほうに、

if pATAI = 565.5 then
ShowMessage('pATAI は 565.5 です。');

を入れて、値を確認してみるとか・・・・

Edited by: igy kk on Jul 22, 2016 3:37 AM
hiroshi aoyagi

Posts: 12
Registered: 12/11/13
Re: 四捨五入について  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Jul 24, 2016 5:55 PM   in response to: igy kk in response to: igy kk
igy kkさんありがとうございます。

ご提案頂きた、
if pATAI = 565.5 then
ShowMessage('pATAI は 565.5 です。');
等で再度、値を確認してみます。

ありがとうございました。
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02