0

指数表記で値を格納する float 列を持つ sql テーブルがあります。値は -1.23E-256 です。クエリを実行してクエリ結果を変数に割り当てると、この float 値を decimal(15,2) に割り当てています。しかし、この科学表記法のために、値が 4gl プログラムの変数に代入されず、エラーが発生します。変換関数とキャスト関数を使用して、選択クエリでその科学表記法を 10 進数に変更しようとしましたが、「値が 10 進数に格納するには非常に小さい」というエラーがスローされます。これらの float 変数をデータベースから 4gl プログラムの変数に 10 進形式で取得したいと考えています。どうすればそれを達成できますか?

4

3 に答える 3

3

ではない正確に。最初に float に変換してから、decimal などに変換する必要があります。

select convert(decimal(15,2), convert(float, '-1.23E-256')) 

に変換:0.00

したがって、もちろん値は失われますが、少なくともエラーは発生しません。

于 2013-12-10T12:22:23.420 に答える
2

decimal [ (p[ ,s] )] および numeric[ (p[ ,s] )] 固定の精度と位取りの数値。最大精度が使用される場合、有効な値は - 10^38 +1 から 10^38 - 1 です。

float - 1.79E+308 から -2.23E-308、0 および 2.23E-308 から 1.79E+308

したがって、数値が小さすぎるため、浮動小数点のままにしておく必要があります。

于 2013-11-07T21:27:35.987 に答える
1

Wolfram Alphaによると、値

-1.23E-256 = -1.23×10^-256

つまり、小数点以下を 256 回シフトする必要があります。その TINY 数値を 2 の精度に合わせようとしています。小数点以下 1 から 253 はすべて 0 になります。

したがって、@ user2615302 は正しく、フロートのままにしておく必要があります

于 2016-11-16T18:23:26.240 に答える