在POWER MSDN文档, 表明,第一个参数过去吧,是,或者应该是,可转换为floatSQL服务器电源功能discrepanacy?
POWER (float_expression , y)
但是当你运行
`Select power(19.8, 2) withoutCast,
power(Cast(19.8 as float), 2) withCast`
你:
withoutCast withCast
------------ ----------------------
392.0 392.04
正确的值当然应该是392.04。
该函数返回时,输入参数没有预先转换为浮动错误的答案。
这显然是由本声明MSDN文档,所记录:
“返回作为float_expression提交了相同的类型。例如,如果一个小数(2,0)被提交为float_expression,返回结果是十进制(2,0)。“
但是,如果我提交19.8作为第一表达,为何是函数假设它是一个十进制(19,0)和截断的答案的小数部分????
是的,我注意到了这一点,如果我把它19.80,那么它的工作原理。我看到了逻辑,但这很令人不安。不,我希望有效数字的数量取决于函数的功能。将一个十进制数字提高到一个次幂要求结果中的小数位数多于输入值中的小数位数。如果你要求平均值为100的整数,都集中在值5的几位数字内,你是否乐意总是得到5的答案?这似乎是我对设计要求的一个疏忽。 –
取决于我期望平均表达的格式。如果我拿一个整数的答案,那么我会期望5,因为这是答案。同样,可以将3分为2,如果是整数除法则得到1的回答,如果是合理除法则得到1.5的回答。对于手术的背景有些话要说。 –
根据我的要求,我期望的是与默认功能不同的问题。默认情况下,它不应该失去精度。如果我执行'Select 2.2 * 2.2',它不会假设在“上下文”中,因为我乘以十进制(9,1)值,它应该生成一个4,0的十进制(9,1)结果,是吗? ?不,它会产生4.04的正确结果。 - 那么为什么在执行任何其他数学函数时呢?然而,+1解释如何工作... –