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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.