web-dev-qa-db-ja.com

精度を丸めたり保存したりせずに、floatを小数としてキャストする方法はありますか?

だから、もしあなたが

CAST(field1 as decimal) field1

これにより、自動的に丸めが追加されます。

オリジナルは次のように定義されます:

field1タイプ:浮動長:8精度:53

このフィールドを10進数(二重ではなく)として生成するには、Entity Frameworkレイヤーが必要なので、10進数にキャストする必要があります。

元の精度を保持し、丸めないように、10進数としてキャストする方法はありますか?

次の理由により、キャストで精度を宣言する必要を回避したいと思います。

  1. さまざまな精度に関係する数百のフィールドがあります。
  2. 基になるテーブルが将来変更されると、予期しないバグが発生する可能性があります。
  3. 管理がより困難になります。
26
Sonic Soul

やってみました:

SELECT Cast( 2.555 as decimal(53,8))

これは2.55500000を返します。それはあなたが望むものですか?

更新:

どうやらSQL_VARIANT_PROPERTYを使用して、値の精度とスケールを見つけることもできます。例:

SELECT SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Precision'),
SQL_VARIANT_PROPERTY(Cast( 2.555 as decimal(8,7)),'Scale')

8|7を返します

変換プロセスでこれを使用できる場合があります...

51
Abe Miessler

SELECT CAST(field1 AS DECIMAL(10,2)) field1を試して、10,2必要な精度で。

2
Sadhir
cast (field1 as decimal(53,8)
) field 1

デフォルトはdecimal(18,0)です。

1
JeffO