アプリケーションでどのように交換することはできま金datatypeは、小数?
質問
たいへの変換金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 ...
所属していません StackOverflow