老兄,记得给分,我等钱用。这是我发明的,用了很久了。function Round45(GetOldCurr: Currency;Digits: integer=2): Currency;
// 实数取四舍五入,使用 myCurrency:=Round45(myCurrency,2)
var tmpCurr:Currency;
begin
  tmpCurr:= GetOldCurr * (IntPower(10,Digits));  // 小数点右移digits位
  if Abs(Frac(tmpCurr)) < 0.5 then tmpCurr:= Int(tmpCurr)  // 保留整数部分
  else
    if tmpCurr>0 then tmpCurr:= Int(tmpCurr)+1
    else tmpCurr:= Int(tmpCurr)-1;  // 进位
  Result:= tmpCurr /IntPower(10,Digits);  // 小数点回移
end;

解决方案 »

  1.   

    唉,现成的Delphi函数 ,5555555555555555555....
      

  2.   

    我找到了
    Rounds a floating-point value to a specified digit or power of ten using 揃anker抯 rounding?UnitMathCategoryArithmetic routinestype TRoundToRange = -37..37;
    function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;DescriptionCall RoundTo to round AValue to a specified power of ten.AValue is the value to round.ADigit indicates the power of ten to which you want AValue rounded. It can be any value from ?7 to 37 (inclusive).RoundTo uses 揃anker抯 Rounding?to determine how to round values that are exactly midway between the two values that have the desired number of significant digits. This method rounds to an even number in the case that AValue is not nearer to either value.The following examples illustrate the use of RoundTo: Expression ValueRoundTo(1234567, 3) 1234000
    RoundTo(1.234, -2) 1.23
    RoundTo(1.235, -2) 1.24
    RoundTo(1.245, -2) 1.24Note: The behavior of RoundTo can be affected by the Set8087CW procedure or SetRoundMode function.