[Delphi] 数字の丸め
トップページへ
※全てのDelphi(楽天市場で探す ・ amazonで探す)で動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます
※(2025/2/11) 小数第3位の実行例を追加しました。
サンプル ※説明に必要な部分しか記述していません
このサンプルではRoundToとSimpleRoundToを使って複数のパターンを試していますが、それぞれで結果に違いがあります
下記を実行すると
procedure TForm1.Button1Click(Sender: TObject); //フォーム上にTMemo, TButtonを配置します //uses句に Math を追加しておきます //RoundToとSimpleRoundToとで結果に違いがあります。各関数の詳細はヘルプや下記の公式を参照して下さい var w_e: Extended; begin Memo1.Clear; Memo1.Lines.Add('Round : 近い整数への丸め'); w_e := System.Round(1.4); Memo1.Lines.Add(FloatToStr(w_e)); w_e := System.Round(1.5); Memo1.Lines.Add(FloatToStr(w_e)); Memo1.Lines.Add('RoundTo : 丸め("Banker''s Rounding"法)'); w_e := Math.RoundTo(1.4, 0); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(1.5, 0); Memo1.Lines.Add(FloatToStr(w_e)); //小数点第2位以下を丸め w_e := Math.RoundTo(1.45, -1); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(1.55, -1); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(1.454, -2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(1.456, -2); Memo1.Lines.Add(FloatToStr(w_e)); //小数点第3位を処理 w_e := Math.RoundTo(2.124, -2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(2.125, -2); Memo1.Lines.Add(FloatToStr(w_e)); Memo1.Lines.Add('RoundToだと、小数第3位が4、5どちらの場合でも切り捨てられました'); //十の位以下を丸め w_e := Math.RoundTo(1234, 2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.RoundTo(1256, 2); Memo1.Lines.Add(FloatToStr(w_e)); Memo1.Lines.Add('SimpleRoundTo : 丸め(非対称的な算術型丸め)'); w_e := Math.SimpleRoundTo(1.4, 0); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(1.5, 0); Memo1.Lines.Add(FloatToStr(w_e)); //小数点第2位以下を丸め w_e := Math.SimpleRoundTo(1.45, -1); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(1.55, -1); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(1.454, -2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(1.456, -2); Memo1.Lines.Add(FloatToStr(w_e)); //小数点第3位を処理 w_e := Math.SimpleRoundTo(2.124, -2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(2.125, -2); Memo1.Lines.Add(FloatToStr(w_e)); Memo1.Lines.Add('SimpleRoundToだと、小数第3位が4なら切り捨て、5なら切り上げられました'); //十の位以下を丸め w_e := Math.SimpleRoundTo(1234, 2); Memo1.Lines.Add(FloatToStr(w_e)); w_e := Math.SimpleRoundTo(1256, 2); Memo1.Lines.Add(FloatToStr(w_e)); end;
画像の通り「1.45および1.55の小数点第2位以下を丸めた時」、
RoundTo(結果:1.4 と 1.6)と
SimpleRoundTo(結果:1.5 と 1.5)
とでは値が異なります。
一方で、算数としての第二位の四捨五入だと
1.45→1.5
1.55→1.6
と思われ、このことから「丸め」処理は四捨五入とは完全に一致しない場合があるので注意が必要です。
Delphi公式
関連記事
→Delphiメニューへ戻る