<p>Delphiで切り捨て、四捨五入、切り上げする際にどんな関数を使っていますか？<br />Floor、Trunc、Round、SimpleRound、Ceil などを使っていることと思う。<br />これらの関数は、戻り値の範囲がLongintの範囲であったり、正負での扱いが対照でなかったりするので作ってみた。<br />x に丸めたい値を、Factor に丸め位置(小数点以下桁数：小数部第一位は1、整数部１桁目は-1)を与える。<br /><strong>※Delphi7 以降には、標準で通常の四捨五入関数 (SimpleRoundTo) が付いている。</strong></p>
<dl><dt><strong>切り捨て</strong></dt><dd>
<pre class="brush: delphi" title="切り捨て">function MyRoundDown(x: Currency; Factor: Integer): Currency;
var
  dFactor: Double;
begin
  Factor := Factor -1;
  dFactor := IntPower(10, Factor);
    if Factor &lt; 0 then Factor := Factor +1;
  if x &gt;= 0 then
    Result := Int(x * dFactor) / dFactor
  else
    Result := Int((x * dFactor) + 0.9) / dFactor;
end;
</pre>
</dd><dt><strong>四捨五入</strong></dt><dd>
<pre class="brush: delphi" title="四捨五入">function MySimpleRound(x: Currency; Factor: Integer): Currency;
var
  Sgn: Integer;
  dFactor: Double;
begin
  if x &gt;= 0 then Sgn := 1 else Sgn := -1;
  if Factor &lt; 0 then Factor := Factor +1;
  Factor := Factor -1;
  dFactor := IntPower(10, Factor);
  Result := Int(Abs(x) * dFactor + 0.5) / dFactor * Sgn;
end;
</pre>
</dd><dt><strong>切り上げ</strong></dt><dd>
<pre class="brush: delphi" title="切り上げ">function MyRoundUp(x: Currency; Factor: Integer): Currency;
var
  dFactor: Double;
begin
  Factor := Factor -1;
  dFactor := IntPower(10, Factor);
  if Factor &lt; 0 then Factor := Factor +1;
  if x &gt;= 0 then
    Result := Int((x * dFactor) + 0.9) / dFactor
  else
    Result := Int(x * dFactor) / dFactor;
end;</pre>
<pre>&nbsp;</pre>
</dd></dl>