台灣最大程式設計社群網站
線上人數
1109
 
會員總數:246203
討論主題:189774
歡迎您免費加入會員
討論區列表 >> MS SQL >> 計算小數問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
計算小數問題
價值 : 200 QP  點閱數:235 回應數:8
樓主

真的有點難
高級專家
11137 37
7039 1449
發送站內信

select 1/0.19*38/20000
這個等於 0.009999998300

declare @a int=1
declare @b numeric(18,2)=0.19
declare @c numeric(18,2)=38
declare @d int=20000

select @a/@b*@c/@d
這個等於 0.010000000

cast as float 變成0.01

我要如何調整變數 才能等於0.009999998300

搜尋相關Tags的文章: [ 除法 ] , [ 小數 ] ,
本篇文章發表於2020-12-16 09:44
1樓
回應

P陳
檢舉此回應
猜猜看
declare @b numeric(18,6)=0.19
declare @c numeric(18,6)=38
調成 6 位試試
本篇文章回覆於2020-12-17 08:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

真的有點難
檢舉此回應


第一個變數就不一樣了
本篇文章回覆於2020-12-17 08:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
看起來 是被 Numeric (18,6) 設成 6位小數了
有int 及 18,6 就以小數位最長的為準
@a / @b --->6 位小數

1/1.09 出現近18位小數 (沒設就全部出來)
------------------------------------
您原來的最長的是2位小數
declare @b numeric(18,2)=0.19
declare @c numeric(18,2)=38

select @a/@b*@c/@d -->所以只傳回2位小數 0.01

----------------------------------------
如果要全部出來的話
declare 請設成 Double 或 指定長一點的 如比 Numeric(18,14)


本篇文章回覆於2020-12-17 11:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

真的有點難
檢舉此回應


mssql 沒 double
看來沒解了
本篇文章回覆於2020-12-17 14:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

真的有點難
檢舉此回應
declare @a numeric(18,14)=1
declare @b numeric(18,14)=0.19
declare @c numeric(18,14)=38
declare @d numeric(18,0)=20000

select @a/@b*@c/@d
select 1/0.19*38/20000
還是一樣
本篇文章回覆於2020-12-17 14:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

P陳
檢舉此回應
select @a/@b*@c/@d

您的意思是還是只出現6位 小數而已
還是只出現2位 小數

等一下
-----------------------------
1/0.19*38/2000 其中0.19/38=0.05 剛好有倍數關係 再 *20000 =0.01 沒錯哦
本篇文章回覆於2020-12-20 08:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

真的有點難
檢舉此回應
您看一下 我原po的數據 用變數select 跟select 實際數字 不管怎樣調整 都不一樣 真無解
本篇文章回覆於2020-12-21 10:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

P陳
檢舉此回應
我仔細再算了再算
1/ 0.19 * 38 /20000 答案是0.01
round(1/0.19,2) * 38 /20000 =0.009994
round(1/0.19,3) * 38 /20000 =0.009997
--------------------------------------------
等一下
找到了原因了 被用 RoundDown 處理過了
RoundDown(1/0.19,6) * 38 /20000 = 0.0099999983 (用excel 的函數算的)
本篇文章回覆於2020-12-21 22:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.