• ベストアンサー

VB 四捨五入の結果が Windows98 とXPで異なる

VBで単価×数量=金額で金額は小数点以下四捨五入にしたく下記プログラムを書きました。 DIM cAMNT AS CURRENCY DIM cPRIC AS CURRENCY DIM lQTY AS LONG cAMNT = cPRIC * lQTY cAMNT =FORMAT(cAMNT,"########") 金額小数点以下が.5の場合のみ印刷すると下記の結果になります。 OSがWINDOWS98 WINDOWS2000 の場合 Code Price Qty Amount AAA 1.5 3 5 AAB 0.49 3 4 合計 9 OSがWindowsXP PRO の場合 Code Price Qty Amount AAA 1.5 3 4 AAB 0.49 3 4 合計 8 XPのパソコンで動かした場合求める結果が出ません。 .5が切り捨てられます。 なぜでしょうか?宜しくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
noname#4564
noname#4564
回答No.3

  オートメーションライブラリの「仕様変更」だそうです。(参考URL) さすがにこの「仕様」は不評だった(かなり叩かれた?)ようで、SP1では 元の仕様に戻ったようです。(笑) 四捨五入はFormat関数を使用しなくても、「端数に5を加算して切り捨てる」 ことで実現できます(というか、Format関数は文字列処理の関数なので、数値 演算に使用するのはどうかと思います)。 下記はその一例です。   Public Function GetRoundOff(ByVal curData As Currency) As Currency   If curData > 0 Then     GetRoundOff = Fix(curData + 0.5@)   Else     GetRoundOff = Fix(curData - 0.5@)   End If End Function  

参考URL:
http://support.microsoft.com/default.aspx?kbid=418691
GA1
質問者

お礼

早速のご回答どうもありがとうございます。 早速SP1を入れます。 Format関数、便利なので多用していますがこの辺も見直します

その他の回答 (2)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

Format関数はXPのSP1で修正されています。 でも、四捨五入は Int(n + 0.5)またはFix(n + 0.5) を使うべきでしょう。 http://www.nils.ne.jp/~ymatsu/program/vb/45.htm http://support.microsoft.com/default.aspx?scid=kb;ja;JP418691

GA1
質問者

お礼

どうもありがとうございます。 助かりました。

  • sPP
  • ベストアンサー率41% (5/12)
回答No.1

それはWindowsXPの仕様によるもののようです。 以下のマイクロソフトの技術情報をご覧下さい。 現在はWindowsXPにSP1を適用することで解決するようです。

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;418691

関連するQ&A