0

.NET から来て、次のことを理解しようとしています。

DEFINE total_real DECIMAL(12,5)
DEFINE total_dec  DECIMAL(6,5)
DEFINE total_int  SMALLINT

LET total_real = (total_real / 50)      
LET total_int = total_real
LET total_dec = total_real - total_int

の目的はtotal_real - total_int何ですか?

私はC#で同様のことをしようとしましたが、最初に/に変換total_intしないとできません。これは を に変換するだけですか?doubledecimaldecimalint

4

2 に答える 2

1

4GL のマニュアルを読む必要があります。

コードは「実数」を取り、それを 50 で割り、「整数」と「小数」の部分を取得しているようです。

于 2015-01-21T02:22:19.007 に答える
1

コードは危険な方法で書かれていますが、Richard Scheiderが回答で推測したように、その意図は数値の整数部分と小数部分を取得することです。

問題はSMALLINT、範囲が ±32,767 の 16 ビット量であることです (-32,768 は NULL を表すために予約されています)。また、aDECIMAL(12,5)は 9,999,999.99999 までの値を受け入れることができます。そして、その数を 50 で割った値は、a に収まる値の範囲よりもはるかに大きくなりますSMALLINT

「すべて10進数」でジョブを実行するには、次を使用できます。

DEFINE total_real DECIMAL(12,5)
DEFINE total_dec  DECIMAL(6,5)
DEFINE total_frac DECIMAL(6,0)

LET total_real = (total_real / 50)      
LET total_int  = TRUNC(total_real)
LET total_frac = total_real - total_int

または、単純に に変更SMALLINTINTEGERます。 INTEGERは 32 ビットの符号付き数量です。

于 2015-01-21T06:42:36.783 に答える