求教关于sql中str函数的问题,str(1.15,18,1)为什么返回的是1.1?

AndriyChoi 2016-01-20 03:27:22
最近看到某程序四舍五入用的是str函数,发现 1.15保留1位小数变成是1.1

于是再试了下其他几个数得出如下结果

SELECT STR(1.04,18,1) 返回 1.0
SELECT STR(1.05,18,1) 返回 1.1
SELECT STR(1.06,18,1) 返回 1.1

SELECT STR(1.14,18,1) 返回 1.1
SELECT STR(1.15,18,1) 返回 1.1
SELECT STR(1.115,18,2) 返回 1.12
SELECT STR(1.16,18,1) 返回 1.2


SELECT STR(1.24,18,1) 返回 1.2
SELECT STR(1.25,18,1) 返回 1.3
SELECT STR(1.26,18,1) 返回 1.3


发现就.15保留1位小数 并不是四舍五入的规则,不知道为何?
用decimal函数来转换就没什么问题
有哪位达人能解惑么?
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
道素 2016-01-20
  • 打赏
  • 举报
回复
这是浮点的问题 SQL 内部的操作是先默认转换为float(53),然后在转换为str DECLARE @f1 FLOAT(53)=4.65, @f2 FLOAT(53)=3.65 SELECT STR(@f1,5,1),STR(@f2,5,1) 返回:4.7,3.6 DECLARE @f1 FLOAT(5)=4.65, @f2 FLOAT(5)=3.65 SELECT STR(@f1,5,1),STR(@f2,5,1) 返回,4.7,3.7
中国风 2016-01-20
  • 打赏
  • 举报
回复
STR ( float_expression [ , length [ , decimal ] ] ) 注意红色(用于表示浮点数值数据的大致数值数据类型。浮点数据为近似值;因此,并非数据类型范围内的所有值都能精确地表示。)再测 SELECT STR(1.151,18,1) 这是浮点的特性
Ginnnnnnnn 2016-01-20
  • 打赏
  • 举报
回复
STR(float_expression , length[,decimal]) 这个是将数字转化成字符,并从左边填充空格的。 几个例子感受一下 SELECT STR(3412.23,5,1) --结果 ' 3412' 因为 3412. 长度是5 ,还没到小数位,舍去 SELECT STR(123.55,2,1) --结果 '**' 因为超出长度 SELECT STR(1235.123,6.1) --结果 '1235.1' 这个是正常结果 SELECT STR(-1234.123,6,1) --结果 ‘ -1234’ 理由同第一个例子 至于你提到的例子,基本上length 都足够,所以向左填充空字符
AndriyChoi 2016-01-20
  • 打赏
  • 举报
回复
是否因为float类型的问题 ------------------------------------------------- STR ( float_expression [ , length [ , decimal ] ] ) 参数 float_expression 带小数点的近似数字 (float) 数据类型的表达式。 length 总长度。它包括小数点、符号、数字以及空格。默认值为 10。 decimal 小数点后的位数。decimal 必须小于或等于 16。如果 decimal 大于 16,则会截断结果,使其保持为小数点后具有十六位。 返回类型 char
AndriyChoi 2016-01-20
  • 打赏
  • 举报
回复
又发现几个 像是SELECT STR(94.35,18,1) 返回94.3S ELECT STR(1.35,18,1)返回1.4 实在是找不到什么规律

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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