![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 真的有點難 ![]()
![]() |
1樓 |
猜猜看
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樓 |
看起來 是被 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樓 |
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |