想請問大家有遇過以下狀況嗎?
我工具是使用MS SQL
我有一個A1的欄位某筆資料…裡面數字是78.3000001
然後我下select * from ATable的時候,出現的是78.3
但是,當我到ATable內按右鍵編輯的時候,出現的確是78.3000001
請問有前輩有遇過這狀況嗎??是否可以解答呢?
1、若我想下select去查到底有多少筆類似78.3000001的話,語法該如何下?
2、這種狀況的話,是工具的問題嗎??該如何解決呢?
再麻煩各位了,若資料有不足之處,我可以再補充,謝謝!
想請問大家有遇過以下狀況嗎?
我工具是使用MS SQL
我有一個A1的欄位某筆資料…裡面數字是78.3000001
然後我下select * from ATable的時候,出現的是78.3
但是,當我到ATable內按右鍵編輯的時候,出現的確是78.3000001請問有前輩有遇過這狀況嗎??是否可以解答呢?
1、若我想下select去查到底有多少筆類似78.3000001的話,語法該如何下?
SELECT * FROM ATable WHERE A1 = 78.3000001;
2、這種狀況的話,是工具的問題嗎??該如何解決呢?
這是因為SQL Server在顯示數值時會進行四捨五入,因此某些數字在顯示時可能會被修改。
可以使用精確的數值類型,例如 DECIMAL(38, 18) 或 NUMERIC(38, 18) 代替 FLOAT 或 REAL 類型,以確保存儲的數值不會被修改。
SELECT CAST(A1 AS DECIMAL(38, 18)) AS A1_Formatted FROM ATable;
或 使用 STR() 函數來強制轉換數值為字串:
SELECT STR(A1, 30, 18) AS A1_Formatted FROM ATable;
1、若我想下select去查到底有多少筆類似78.3000001的話,語法該如何下?
CREATE TABLE #ATable (
A1 float
)
INSERT INTO #ATable(A1) VALUES(78.3000001)
SELECT * FROM #ATable WHERE CONVERT(decimal(20,1),A1) = 78.3
DROP TABLE #ATable
==================================================================
3、為何float會有這狀況呢??
參考文件 : https://blog.greglow.com/2018/01/15/sql-newbie-mistake-1-using-float-instead-decimal/
==================================================================
請問目前狀況無法改decimal或 numeric的話
不過如果您的欄位是用於 金額 計算的話...避免夜長夢多 建議還是用 decimal 型態
謝謝您的回覆
目前我想下select * from ATable先查出來到底A1有多少78.3000001類似的值…至少先找出來後,再提供給使用者,請問語法上有何參考的呢??
直接convert或cast就好,你用float都會遇到,最好的方式就是通通轉換或乾脆多一欄,一次轉換過去。
(已刪除)
(已刪除)
(已刪除)
目前我想下select * from ATable先查出來到底A1有多少78.3000001類似的值…至少先找出來後,再提供給使用者,請問語法上有何參考的呢??
CREATE TABLE #ATable (
A1 float
)
INSERT INTO #ATable(A1) VALUES( 78.3000001)
SELECT
*
FROM (
SELECT
SUBSTRING(STR(A1,20,7),CHARINDEX('.',STR(A1,20,7))+2,LEN(STR(A1,20,7))) AS Test
,A1
FROM #ATable
)AS Temp
WHERE Test!='000000'
DROP TABLE #ATable
範例資料 : 78.3000001
取得 000001 判斷 非 000000 的資料,就是你要的答案了。
謝謝前輩的資訊,我試一下…
一般像這樣的數值。在大多數的任何應用及軟體都會碰到過。
主因也是因為「浮點數值」(是不是這個名詞不太清楚了)
其原因也是因為電腦其實是很笨的。認真來說程式只會加法。
所以只要是其它運算都是用特別的方式,像是補位、進位.....(太多名詞看誰會補充,我是沒記那麼多)
所以在一般小數點運算中,並無法得到實際正確的值。
一般程式上的做法都是會經由再運算輸出處理。已防止出現這種「浮點數值」
其原因好像也跟2進位是有關係。早期我是有看過這一類文章。
但實在太過艱難理解了。所以只知些許。但我講不出大道理。
就看誰能補充了。