アプリ版:「スタンプのみでお礼する」機能のリリースについて

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が切り捨てられます。

なぜでしょうか?宜しくお願いします

A 回答 (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=4 …
    • good
    • 0
この回答へのお礼

早速のご回答どうもありがとうございます。
早速SP1を入れます。

Format関数、便利なので多用していますがこの辺も見直します

お礼日時:2003/02/10 16:47

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=k …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/02/10 16:49

それはWindowsXPの仕様によるもののようです。


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

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!