- ベストアンサー
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が切り捨てられます。 なぜでしょうか?宜しくお願いします
- みんなの回答 (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
その他の回答 (2)
- todo36
- ベストアンサー率58% (728/1234)
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
お礼
どうもありがとうございます。 助かりました。
- sPP
- ベストアンサー率41% (5/12)
それはWindowsXPの仕様によるもののようです。 以下のマイクロソフトの技術情報をご覧下さい。 現在はWindowsXPにSP1を適用することで解決するようです。
お礼
早速のご回答どうもありがとうございます。 早速SP1を入れます。 Format関数、便利なので多用していますがこの辺も見直します