在SQL我怎么可以转换为金钱的数据类型,以小数点?
题
我想转换一个金的数据类型以小数,因为我想要记录的结果,8位小数。
例如,在货币兑换率表,我看到的速存储为2871047428.20作为一个资金类型;使用Microsoft SQL管理工作室,我要除由10000000为了实现结果287.10474282;然而结果实际上我是287.1047.
我相信的理由我得到只小数点后4位是因为它是金钱数据类型,因此,我认为前进的方向是把这一小数的数据类型。...
解决方案
在这里比较左栏中的数值,右边一栏所计算出的金钱价值:
DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,4)) / 10000000, @money / 10000000
也参看在这里堆溢出:
其他提示
splattne的回答是正确的几乎,除了两个小的改动:
DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST(@money AS decimal(34,6)) / 10000000.0, @money / 10000000.0
这会给出正确的答案:287.10474282。我所做的是改变的精确度值与添加” 0.0" ,以分频值。
这是困扰我现在唯一的一点是我投的价值为十进制(34,6)的事实,而不是预期的十进制(34,8)。
所以,我写查询以另一种方式,这让我更有意义:
DECLARE @money AS money
SET @money = 2871047428.20
SELECT CAST((@money / 10000000.0) AS decimal(34,8)), @money / 10000000.0
请看看哪一个适合你。
您是小数部门的所有古怪的击球 这里是我的回答另一个线程,T-SQL十进制分割精度
和可能必须隐式浮动转换太因为数据类型优先的一>如果使用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