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

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