在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解釋如何工作... –