アプリケーションでどのように交換することはできま金datatypeは、小数?

StackOverflow https://stackoverflow.com/questions/638290

  •  10-07-2019
  •  | 
  •  

質問

たいへの変換金datatypeは、小数点がたい結果を記録し、8桁.

例えば、通貨レートテーブルの利率として格納され2871047428.20として金datatype;Microsoft SQLエリアマネジメントしたい分けることにより10000000のための287.10474282;ただし、その結果、私は実際に取得する287.1047.

そもそも私は4桁しているからでしょう金datatypeると思うのでこれを変換し、小数datatype....

役に立ちましたか?

解決

こちらの比較左欄の数値は右の列の算出金値:

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,4)) / 10000000, @money / 10000000

きましてはこちらもご覧くださいにスタックオーバーフロー:

他のヒント

splattneの答えは、2つの小さな変更を除いてほぼ正しいです:

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,6)) / 10000000.0, @money / 10000000.0

これにより、正しい答えが得られます:287.10474282。私がやったのは、精度の値を変更し、「。0」を追加することです。除算値に。

今私を困惑させている唯一のことは、期待されるdecimal(34,8)ではなくdecimal(34,6)として値をキャストしなければならないという事実です。

だから、私は別の方法でクエリを作成しました。それは私にとってより理にかなっています:

DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST((@money / 10000000.0) AS decimal(34,8)), @money / 10000000.0

どちらが適切か確認してください。

あなたは皆、小数の割り算の奇妙なことをしている 別のスレッド、T-SQL 10進除算精度に対する私の答えは次のとおりです。

また、データ型の優先順位のために、暗黙的な浮動小数点変換も行われる可能性があります 10000000.0を使用する場合

DECLARE @money AS money
SET @money = 2871047428.20
--Oddities
SELECT
    CAST(@money AS decimal(34,8)) / 10000000,
    CAST(@money AS decimal(34,8)) / 10000000.0,
    CAST(@money AS decimal(34,8)) / 10000000.00,
    CAST(@money AS decimal(34,8)) / 10000000.000,
    CAST(@money AS decimal(34,8)) / 10000000.0000
--Should be safe. My brain hurts if I work through p and s
SELECT
    CAST(@money AS decimal(38,8)) / CAST(10000000 AS decimal(8,0))
    SELECT CAST(currency_rate AS decimal) / 10000000 FROM ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top