1

TADOQuery ラッパー オブジェクトから次の SQL クエリを実行しようとすると、問題が発生します。

SELECT * 
FROM obj
WHERE ObjectType = 'user' 
  AND ( ((( valueOne > 6.13661152336E-318 ) and ( valueTwo < 1.68611310981 )

問題は明らかにValueOne小さすぎて、通常の 64 ビット マシン精度内で表現できないことです。問題は、これらの値をファイルから読み取り、取得する入力データを制御できないことです。この問題に対処するために丸め手順を実装しますが、SQL Server 2012 Express で表現可能な最小 (絶対値) の数値がどれかわかりません。

誰でも私を助けてくれますか

4

1 に答える 1

2

Decimal and numeric:

精度と位取りの固定数値。最大精度が使用される場合、有効な値は - 10^38 +1 から 10^38 - 1 です。

float and real:

実数範囲: - 1.79E+308 ~ -2.23E-308、0 および 2.23E-308 ~ 1.79E+308
実数範囲: - 3.40E + 38 ~ -1.18E - 38、0 および 1.18E - 38 ~ 3.40E + 38

int, bigint, smallint, and tinyint:

bigint 範囲: -2^63 (-9,223,372,036,854,775,808) から 2^63-1 (9,223,372,036,854,775,807) int
範囲: -2^31 (-2,147,483,648) から 2^31-1 (2,147,483,647)
smallint 範囲: ) から 2^15-1 (32,767)
tinyint 範囲: 0 から 255

6.13661152336E-318ネイティブ SQL Server がサポートする型として SQL Server で表現できる範囲外です。CLR User defined typeの使用を試みることができます。このような極端な値を操作するには、カスタム CLR ライブラリが必要です。

于 2013-03-01T13:42:44.503 に答える