喫茶XRAYトップページ

[スレッド全体
]

[2851] Re:罠、パート2返信 削除
2009/12/18 (金) 14:18:49 Mr.XRAY
▼ Saykeさん,どうもです

> 本日は当地広島においても市内から見える山々は雪化粧しています。

スキーヤー,ボーダー,
もちろんスキー場の経営者も喜んでいることでしょう.

>   {税計算 1円未満切捨て}
>   Cells[10,RowCount-1] := StrToComma(IntToStr(Trunc(Price * TAX_RATE)));


これ何かマズイんすか?

[2853] Re2:罠、パート2返信 削除
2009/12/19 (土) 14:28:46 Syake
▼ Mr.XRAYさん
>
> >   {税計算 1円未満切捨て}
> >   Cells[10,RowCount-1] := StrToComma(IntToStr(Trunc(Price * TAX_RATE)));
>
> これ何かマズイんすか?



ちなみに
A)
 MessageBox(IntToStr(Trunc(42000* 1.05)),{略});
の場合と
B)
var
  Dub:Double;
{−−−−−}
Dub:=42000* 1.05;
MessageBox(IntToStr(Trunc(Dub)),{略});
の場合で

A)44099
B)44100

てな感じで結果は異なります。
直接使用する場合は多分内部的にSingle扱いなのでしょうか。
D2007の場合ですが他の環境ではどうかは不明です。



[2854] Re3:罠、パート2返信 削除
2009/12/19 (土) 17:43:51 Mr.XRAY
▼ Syakeさん

>  MessageBox(IntToStr(Trunc(42000* 1.05)),{略});

ははぁ,なるほど.いや知りませんでした.
Delphi2010でもなります.ちょっと不思議な現象のような気もしますね.
以前,これとは違うのですが,整数と実数(Double)の乗算で似たような
現象にあったことがあります.
そこで,変数ではなく実値を使用する時は,たとえば上の例で言うと,

42000.0* 1.05

と小数点以下も書いて,実数(Double型)として認識するようにして
います(Fortranだと,そうしないと整数扱いになります).
CPUウィンドウででも追いかければ詳しいことがわかるんでしょうけど.

いずれにしても,過去の同様の演算のあるコードを見直す必要があり
そうな...
う〜ん,情報サンクスです.
いやな知識が増えてしまった!!

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82