RecordGridにて表示される値に誤差が生じる

◆ご質問◆
グリッドのドメインが「double」の場合に、
小数値を入力すると誤差が生じるケースが存在します。

どのようにすれば誤差を生じさせず、表示することができるのでしょうか。

◆回答◆
小数以下の数値で誤差を生じさせない方法として、
2点挙げられます。

■1点目
 RecordFieldのドメインにStringを設定し、
 入力した値をそのまま表示させるようにし、
 計算を行う際には値の小数を整数に変換した上で
 計算するという方法です。

 まず、プログラムで扱う小数点以下の最大桁数を決めます。
 (下記のサンプルであれば、小数点以下3桁が最大桁数)
 その桁数までが整数となるように
 10のN乗を掛け、整数として計算を行い、
 その結果を10のN乗で割ります。
 これにより、浮動小数点数を介さずに計算を行い、
 誤差の発生を抑止できます。

 ==============================================
 {let number:double = 0}

 {for i:int = 1 to 100000 do
     ||小数0.003を整数にするために1000倍する
     set number = number + 0.003*1000
 }
 ||上記で1000倍した分を元に戻す
 {set number = number/1000}
 {value (number asa int)}

 ==============================================

■2点目
 RecordFieldのドメインにStringを設定し、
 計算の時には、BigDecimalを使用するという方法です。

 CurlではjavaでいうところのBigDecimalと類似した機能を扱うことができます。
 BigDecimalでは任意の長さの10進数の表現と操作を行え、
 浮動小数点数のように10進数から2進数に変換するという動作をしないため、
 丸め誤差を生じさせずに計算を行う事ができます。

 BigDecimalクラスは既存のCurlAPIではないため、
 以下URLよりダウンロードする必要がございます。
 http://www.curlap.com/curl/bigDecimalSample.zip

 ダウンロードしたパッケージ(big-pkg.curl)をBigDecimalを
 使用したいアプレットにインポートすることにより、
 BigDecimalクラスを使用することができます。
  (但し、big-pkg.curlの内容に関してサポートの範囲外になるため、
 このパッケージに関するサポートは行いません。
 あらかじめご了承下さい。)

 詳細はサンプルをご参照ください。