取消
顯示的結果
而不是尋找
你的意思是:

精度和等級正在改變dataframe而鑄造的小數

_Orc
新的因素

當我運行下麵的查詢在磚sql十進製的精度和等級列正在改變。

選擇typeof(合並(Cast(3.45小數(15日6)),0));

6 o / p: decimal(16日)

預期的o / p:小數(15、6)

任何原因的精度和規模正在改變嗎?

1接受解決方案

接受的解決方案

werners1
尊敬的貢獻者三世

確實是有原因的。

原因是強製類型轉換:

合並,你輸入0作為第二值。0是一個整數。

這火花會強迫一個十進製類型。不丟失任何信息,它需要10位數的逗號(max有符號整數的值是2147483647 - > 10位數)。

所以當你把(15、6)你隻有9位數= >火花迫使這16日6。

相同的(8,0)= > 10 0

和(12,0)仍然是12,0。

如果你想避免這種強迫,你可以通過0.00(十進製)而不是0 (int)。

我完全同意,強製類型轉換可以順便說一句。

在原帖子查看解決方案

6個回答6

Kaniz
社區經理
社區經理

嗨@Om辛格!我的名字叫Kaniz,我這裏的技術主持人。很高興認識你,謝謝你的問題!看看你的同行在社區中有一個回答你的問題。否則我將盡快給你回電。謝謝。

werners1
尊敬的貢獻者三世

確實是有原因的。

原因是強製類型轉換:

合並,你輸入0作為第二值。0是一個整數。

這火花會強迫一個十進製類型。不丟失任何信息,它需要10位數的逗號(max有符號整數的值是2147483647 - > 10位數)。

所以當你把(15、6)你隻有9位數= >火花迫使這16日6。

相同的(8,0)= > 10 0

和(12,0)仍然是12,0。

如果你想避免這種強迫,你可以通過0.00(十進製)而不是0 (int)。

我完全同意,強製類型轉換可以順便說一句。

AmanSehgal
尊敬的貢獻者三世

我相信當你改變默認的精度和等級變化的規模。

例如如果你設置為鑄造精度和等級(4 0),火花就會默認(10 0)。

(1),它會默認(11日1)

(2),它會默認(12,2)

(3),它會默認(13日,3)

(8,4),它會默認(14日,4)

(5),它會默認(15日,5)

(6),它會默認(16日6)等等。

我認為的邏輯是:

如果precision-scale < = 10 +比例其他精度= 10:精度精度

werners1
尊敬的貢獻者三世

這僅僅是正確的如果你通過一個整數作為第二參數合並。

例如選擇typeof(合並(Cast(3.45小數(11日2)),把長)(0))返回(22日2)因為長時間需要20數字前麵的逗號。

如果你通過一個小數,其他規則適用。

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map