喫茶XRAYトップページ

[スレッド全体
]

[8406] Format関数を使ったときの数値の丸めについて返信 削除
2015/1/22 (木) 15:56:17 おかぽん
こんにちは

例えば、次のようにFomat関数を使用します。
Format('%9.3f', [123.456789])

結果として、'  123.457' が返りますが、この小数点以下4桁目の丸めの仕様について
記載されたページをご存じないでしょうか?

Roundで丸めた結果と同じかどうかが知りたいのです。

ここを見ても、精度がどうこうしか記載がありません。
http://docwiki.embarcadero.com/Libraries/XE7/ja/System.SysUtils.Format

SysUtilsのソースを見て、FloatToTextに行き着いて・・・最終的には
CurrToDecimal関数を使っていそうな気分にはなってきましたが、
中身はアセンブラで、理解することをあきらめてしまいました。

ステップ実行で追いかけても、アセンブラが読めなくて、どうなっているのか
さっぱりわからなかったんです。



[8407] Re:Format関数を使ったときの数値の丸めについて返信 削除
2015/1/22 (木) 16:28:43 Mr.XRAY
▼ おかぽんさん.どうもです.

> 結果として、'  123.457' が返りますが、この小数点以下4桁目の丸めの仕様について
> 記載されたページをご存じないでしょうか?


う〜ん,私は知らないです.
ちょっと考えると,ないのが不思議な気もしますが.
あまり考えないで使っちゃっていますね (^^;

> SysUtilsのソースを見て、FloatToTextに行き着いて・・・最終的には
> CurrToDecimal関数を使っていそうな気分にはなってきましたが、


根性ですね (^^;
後で私も挑戦してみようかな?


[8409] Re2:Format関数を使ったときの数値の丸めについて返信 削除
2015/1/22 (木) 16:50:42 おかぽん
▼ Mr.XRAYさん
> あまり考えないで使っちゃっていますね (^^;
同じく、考えないで使っていましたが、帳票でFormatを使った結果を表示して
いましたが、諸事情により、その値を数値として使う必要が出てきました。

Format関数で文字列化しているので、StrToFloatとかで実数かでもいいんですが、
元の値として、丸める前の実数値を持っているので、数値→文字列→数値というのも
かっこわるいし、ちょっとのことで、コストかかるかなと。

それなら単純にRound関数で丸めるほうがすっきりするので、念のため確信を
得てからにしようと思ったわけなんですけど。


今時のPCは十分早いので、とりあえずは文字列から数値に戻す方向で検討中。

気になるとこなので、苦手な英文サイトも読まないと(読んでわかったフリするだけ)。

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