PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
3876 | 98/11/06 12:42:01 | RE(2):Truncate関数バグの原因 By M.M |
3875 | 98/11/06 10:54:20 | RE(1):PB5: Truncate関数がバグってるようです。 タイ国からのHELPです。 By あすかちゃんの父 |
3873 | 98/11/05 20:48:35 | PB5: Truncate関数がバグってるようです。 タイ国からのHELPです。 By red |
カテゴリ:PowerBuilderの不具合?
日付:1998年11月06日 10:54 発信者:あすかちゃんの父
題名:RE(1):PB5: Truncate関数がバグってるようです。 タイ国からのHELPです。
redさん、こんにちは。
いくつか確認したいことがあるのですが・・・・
> PowerBuilderにて「数値の切り捨て機能[truncate(a,2)]を使うと、
>時々予期していない変な数値が返ってきます。
>例えば、\"10.20\"の値が\"10.19\"の様に変わってしまいます。
>対応案を教えて下さい。
> ・数値のデータ型はNUMBER型です。
> ・データウィンドウ内の処理です。
NUMBER型というと、Oracleのデータベースから検索してきた数値
データをデータウィンドウで表示しているのですね?
Oracleで問題のカラムの定義はどうなっていますか?
また、\"10.20\"と表示されているカラムは、表示書式が\"0.00\"とか
に定義されていませんか?
>使用例: truncate(a,2)
>
> aの値 獲られる結果
> -------------- -------------
> 10.2000 => 10.19
> 255.5000 => 255.5
> 100.2000 => 100.2
> 34779.2000 => 34779.19
これは推測ですが、おそらく浮動小数点の数値データの精度落ちが
原因ではないでしょうか? 10.20と表示されているデータの実体は、
10.19999・・・となっていて、表示上は四捨五入で表示、切り捨ては
.1999・・・に対して行われているように思います。
浮動小数点データは、数値を仮数部と指数部に分けてメモリ上にデータ
が格納されます。この構造で少ないメモリで大きな桁の数値を扱うこと
ができます。ただその代償として、この時に仮数部で表現できる桁数の
問題や、演算上で精度が落ちて、特に小数点以下のデータが保証されま
せん。
これが原因であれば回避策としては、一番簡単なのは10.1999・・・に
0.001を加算してからtruncate(a,2)すればいいと思います。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows95
DBMS DBMSクライアントソフトウェアなし
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS その他
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.