mysql5资源共享

 找回密码
 立即注册
查看: 163|回复: 10

[MS-SQL Server] 【基础】类似四舍五入怎么办

[复制链接]

2

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2019-7-14 07:54:33 | 显示全部楼层 |阅读模式
比如一个数字:193.77怎样转换成195,也就是小数点前面一位数是1-4那么就是195,小数点前面一位数字是6-9那么就是200(就是1-4进成5,6-9向前进一位)
回复

使用道具 举报

2

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2019-7-14 07:55:59 | 显示全部楼层
比如一个数字:193.77怎样转换成195,也就是小数点前面一位数是1-4那么就是195,如果数字:196.1转换成200,也就是小数点前面一位数字是6-9那么就是200(就是1-4进成5,6-9向前进一位)
回复

使用道具 举报

6

主题

348

帖子

724

积分

高级会员

Rank: 4

积分
724
发表于 2019-7-15 09:34:32 | 显示全部楼层

  1. DECLARE@numASFLOAT;
  2. SET@num=196.1;
  3. SELECT(convert(INT,@num/5)+1)*5
复制代码
回复

使用道具 举报

0

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-7-15 11:23:48 | 显示全部楼层
这个太奇妙了,能解释下么。。。
回复

使用道具 举报

2

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
 楼主| 发表于 2019-7-15 13:31:11 | 显示全部楼层
引用2楼听雨停了的回复:

  1. DECLARE@numASFLOAT;
  2. SET@num=196.1;
  3. SELECT(convert(INT,@num/5)+1)*5
复制代码


你好,为0和5时不变;即,190还是190,195还是195;请问怎样处理,感谢
回复

使用道具 举报

0

主题

202

帖子

420

积分

中级会员

Rank: 3Rank: 3

积分
420
发表于 2019-7-15 13:38:08 | 显示全部楼层
除5后向上取整
回复

使用道具 举报

6

主题

348

帖子

724

积分

高级会员

Rank: 4

积分
724
发表于 2019-7-15 15:33:30 | 显示全部楼层
引用4楼qq_35962533的回复:Quote: 引用2楼听雨停了的回复:

  1. DECLARE@numASFLOAT;
  2. SET@num=196.1;
  3. SELECT(convert(INT,@num/5)+1)*5
复制代码


你好,为0和5时不变;即,190还是190,195还是195;请问怎样处理,感谢

  1. DECLARE@numASFLOAT;
  2. SET@num=195;
  3. SELECTCEILING(@num/5)*5;--向上取整函数
复制代码

根据楼上大哥说的,又学会了一招,

回复

使用道具 举报

7

主题

531

帖子

1089

积分

金牌会员

Rank: 6Rank: 6

积分
1089
发表于 2019-7-15 16:26:10 | 显示全部楼层

  1. createfunctiondbo.fn0715(@xdecimal(18,2))
  2. returnsdecimal(18,2)
  3. begin
  4. declare@x2varchar(50),@x3tinyint,@x4varchar(50),@ydecimal(18,2)
  5. select@x2=rtrim(@x)+casewhencharindex('.',rtrim(@x))=0then'.0'else''end
  6. select@x3=cast(substring(@x2,charindex('.',@x2)-1,1)astinyint)
  7. select@x4=substring(@x2,1,charindex('.',@x2)-2)+'Z'

  8. select@y=casewhen@x3in(0,5)then@x
  9. when@x3between1and4thencast(replace(@x4,'Z','5')asdecimal(18,2))
  10. when@x3between6and9thencast(replace(@x4,'Z','0')asdecimal(18,2))+10
  11. elsenullend

  12. return@y
  13. end


  14. selecty=dbo.fn0715(193.77)
  15. /*
  16. y
  17. ---------------------------------------
  18. 195.00

  19. (1行受影响)
  20. */


  21. selecty=dbo.fn0715(196.1)
  22. /*
  23. y
  24. ---------------------------------------
  25. 200.00

  26. (1行受影响)
  27. */


  28. selecty=dbo.fn0715(190)
  29. /*
  30. y
  31. ---------------------------------------
  32. 190.00

  33. (1行受影响)
  34. */


  35. selecty=dbo.fn0715(195)
  36. /*
  37. y
  38. ---------------------------------------
  39. 195.00

  40. (1行受影响)
  41. */
复制代码
回复

使用道具 举报

1

主题

26

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2019-7-15 16:56:45 | 显示全部楼层
  1. DECLARE@tTABLE(NDECIMAL(18,3)NOTNULL)
  2. INSERT@t(N)
  3. VALUES(0),
  4. (1),(2),(3),(4),(5),(190),(194),(195),(195.555),(199.999),(200),(200.001)
  5. SELECT*,5*(CONVERT(INT,CAST(N-0.0001ASDECIMAL(18,4))/5+1))N2FROM@t
复制代码


(13行受影响)
NN2
--------------------------------------------------
0.0000
1.0005
2.0005
3.0005
4.0005
5.0005
190.000190
194.000195
195.000195
195.555200
199.999200
200.000200
200.001205

(13行受影响)
回复

使用道具 举报

6

主题

348

帖子

724

积分

高级会员

Rank: 4

积分
724
发表于 2019-7-15 17:13:46 | 显示全部楼层
CEILING就OK的,不用转多圈圈

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2019-12-13 15:37 , Processed in 0.051328 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

快速回复 返回顶部 返回列表