关于ceiling和floor的问题

wxlcc520 2008-09-11 03:37:08
关于ceiling和floor的问题


一、
select ceiling ((12/10+2)*3) --9
select floor ((12/10+2)*3) --9
二、
select ceiling((1.2+2)*3) --10
select floor((1.2+2)*3) --9

因为 一的括号里的值 不是浮点数,所以结果不同
请问,怎么才能让一和二的结果相同呢?括号里的值 ((12/10+2)*3 是一变量
...全文
138 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
utpcb 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wxlcc520 的回复:]
引用 5 楼 utpcb 的回复:
CAST( (((12/10+2)*3) AS decimal(10,5))
米把变量转换一下


你转换的时候已经算出来是9 了,转完不过变成9.000
结果不还是9吗???
再帮忙看看
[/Quote]
我的意思是你除的时候就给一个转换! 不是转换完了除 !我只是那样写的(*^__^*) 嘻嘻……
wxlcc520 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 roy_88 的回复:]
SQL code
select ceiling ((12*1.0/10+2)*3) --9
select floor ((12*1.0/10+2)*3) --9

select ceiling((1.2+2)*3) --10
select floor((1.2+2)*3) --9
[/Quote]

这个结果是对的,可是我那个括号里的是变量阿,表达式不一定是现在写得这样的,有可能更复杂一些
如果*1.0的话,是不是就需要在变量里挨个字符判断?哪个是乘除的就*1.0,那样不是很麻烦吗:?

还有什么办法吗?帮帮忙
dawugui 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 wxlcc520 的帖子:]
关于ceiling和floor的问题


一、
select ceiling ((12/10+2)*3) --9
select floor ((12/10+2)*3) --9
二、
select ceiling((1.2+2)*3) --10
select floor((1.2+2)*3) --9

因为 一的括号里的值 不是浮点数,所以结果不同
请问,怎么才能让一和二的结果相同呢?括号里的值 ((12/10+2)*3 是一变量
[/Quote]
哦,看明白了.把12/10先转换一下.
12/10 = 1
cast(12/10 as decimal(18,2)) = 1.20
中国风 2008-09-11
  • 打赏
  • 举报
回复
*1.0使數據為浮點
wxlcc520 2008-09-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 utpcb 的回复:]
CAST( (((12/10+2)*3) AS decimal(10,5))
米把变量转换一下
[/Quote]

你转换的时候已经算出来是9 了,转完不过变成9.000
结果不还是9吗???
再帮忙看看
中国风 2008-09-11
  • 打赏
  • 举报
回复

select ceiling ((12*1.0/10+2)*3) --9
select floor ((12*1.0/10+2)*3) --9

select ceiling((1.2+2)*3) --10
select floor((1.2+2)*3) --9

utpcb 2008-09-11
  • 打赏
  • 举报
回复
老龟可能理解错料哈哈 他要的应该是数据类型转换
wxlcc520 2008-09-11
  • 打赏
  • 举报
回复
原来的代码是这样的:结果是9,不是10
declare @qty_logic varchar(100)
declare @s nvarchar(4000)
select @qty_logic='ceiling (12/10+2)*3'

select @s=N'select @qty_logic= ' + stuff(@qty_logic,charindex('ceiling',@qty_logic,1),7,' ' )
execute sp_executesql @s,N'@qty_logic varchar(200) out',@qty_logic out
select @qty_logic=ceiling(cast(@qty_logic as float))

select @qty_logic --9
utpcb 2008-09-11
  • 打赏
  • 举报
回复
CAST( (((12/10+2)*3) AS decimal(10,5))
米把变量转换一下
dawugui 2008-09-11
  • 打赏
  • 举报
回复
CEILING
返回大于或等于所给数字表达式的最小整数。

FLOOR
返回小于或等于所给数字表达式的最大整数。

两个函数的作用不一样,怎么能要求结果一定要一样呢?
dawugui 2008-09-11
  • 打赏
  • 举报
回复
FLOOR
返回小于或等于所给数字表达式的最大整数。

语法
FLOOR ( numeric_expression )

参数
numeric_expression

精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。

返回类型
返回与 numeric_expression 相同的类型。

示例
此示例说明正数、负数和货币值在 FLOOR 函数中的运用。

SELECT FLOOR(123.45), FLOOR(-123.45), FLOOR($123.45)

结果为与 numeric_expression 数据类型相同的计算值的整数部分。

--------- --------- -----------
123 -124 123.0000

dawugui 2008-09-11
  • 打赏
  • 举报
回复
CEILING
返回大于或等于所给数字表达式的最小整数。

语法
CEILING ( numeric_expression )

参数
numeric_expression

是精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。

返回类型
返回与 numeric_expression 相同的类型。

示例
下面的示例显示使用 CEILING 函数的正数、负数和零值。

SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0)
GO

下面是结果集:

--------- --------- -------------------------
124.00 -123.00 0.00

(1 row(s) affected)

dawugui 2008-09-11
  • 打赏
  • 举报
回复
CEILING
返回大于或等于所给数字表达式的最小整数。

语法
CEILING ( numeric_expression )

参数
numeric_expression

是精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。

返回类型
返回与 numeric_expression 相同的类型。

示例
下面的示例显示使用 CEILING 函数的正数、负数和零值。

SELECT CEILING($123.45), CEILING($-123.45), CEILING($0.0)
GO

下面是结果集:

--------- --------- -------------------------
124.00 -123.00 0.00

(1 row(s) affected)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧