PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
14600 | 01/02/15 12:19:23 | RE(5):PB6.5: TrunCate関数の対処方法について By Lucky |
14599 | 01/02/15 11:19:49 | RE(4):PB6.5: TrunCate関数の対処方法について By M.M |
14595 | 01/02/15 10:51:59 | RE(3):PB6.5: TrunCate関数の対処方法について By YAMASHITA, Satoru |
14591 | 01/02/15 09:49:22 | RE(2):PB6.5: TrunCate関数の対処方法について By Lucky |
14588 | 01/02/14 15:39:48 | RE(1):PB6.5: TrunCate関数の対処方法について By Potato |
14587 | 01/02/14 15:27:33 | PB6.5: TrunCate関数の対処方法について By Lucky |
カテゴリ:PowerBuilderの不具合?
日付:2001年02月15日 10:51 発信者:YAMASHITA, Satoru
題名:RE(3):PB6.5: TrunCate関数の対処方法について
Luckyさん、こんにちは。
以下、PB7のヘルプより引用(改行位置は変更しています)
計算フィールドにおける Truncate 関数の使用 浮動小数レジスタ(計算用)にロードされた実数は、
バイナリの記憶領域における最大限の精度で表現されます。
たとえば、2.07 として表示されている実数は、実際には 2.0699999999999997 として格納されています。
このような数値に対して切り捨てを行うと、期待される結果にならないことがあります。
この問題を回避するためには、元の Real 型を Long 型、Integer 型、または Decimal 型に変更するか、
あるいは次のように Truncate 関数の引数に定数を付加します。
Truncate (x + 0.0000001, n )
ちなみに、Truncate は、四捨五入ではなく切り捨てです。
>Double ldb_ret , ldb_value
>ldb_ret = TrunCate( ldb_value , 2) を行うと、
>小数点以下第2位以下を四捨五入してくれるはずなんですが、
>ある数値の場合、正常な四捨五入が出来ないケースがあります。
>例)
> ldb_value ldb_ret 結果
> 10.55 → 10.55 ○
> 10.54 → 10.53 ×
> 10.53 → 10.53 ○
>
>というようにナゼか、10.54の場合にだけ、10.53が返ってきてしまいます。
>ちなみに、 ldb_value は、Oracle8 のNumber(15,0)型のカラムの値を
>設定します。
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows98
DBMS Oracle SQL*Net 8
Browser (記載なし)
Server SoftWare
OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.