高手速来接分, 1.575不进位 1.475进位, 1.275又不进位

NSnaiL 2012-06-19 02:38:01
据我所知四舍五入一般有两种规则
1. 四舍五入, 就是我们小学学的 不多说

2. 四舍六入五凑偶
2.1 当计算位<>5 : 四舍六入
2.2 当计算位=5 :
是否为末位?
是: 前一位为偶数? 舍去 否则 进位
否: 进位


请解释以下现象


DECLARE @f1 FLOAT
SET @f1 = 1.575
SELECT @f1 ,
ROUND(@f1, 2)

DECLARE @f2 FLOAT
SET @f2 = 1.475
SELECT @f2 ,
ROUND(@f2, 2)

DECLARE @f3 FLOAT
SET @f3 = 1.275
SELECT @f3 ,
ROUND(@f3, 2)


---------------------- ----------------------
1.575 1.57

(1 行受影响)


---------------------- ----------------------
1.475 1.48

(1 行受影响)


---------------------- ----------------------
1.275 1.27

(1 行受影响)
...全文
178 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
NSnaiL 2012-06-19
  • 打赏
  • 举报
回复
结贴了 关于这个问题的详细情况 请移步
http://www.oschina.net/question/171192_58329
jyh070207 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
问题出在float类型上,float本身存储数据就是不准确的,你赋值是1.575可能实际上是1.574768655.。。建议使用DECIMAL类型的存储
[/Quote]
++
SQL777 2012-06-19
  • 打赏
  • 举报
回复
DECLARE @f1 FLOAT
SET @f1 = 1.575
SELECT @f1-- ,ROUND(@f1, 2)

DECLARE @f2 FLOAT
SET @f2 = 1.475
SELECT @f2-- , ROUND(@f2, 2)

DECLARE @f3 FLOAT
SET @f3 = 1.275
SELECT @f3 --,ROUND(@f3, 2)

/*
-----------------------------------------------------
1.575

(所影响的行数为 1 行)


-----------------------------------------------------
1.4750000000000001

(所影响的行数为 1 行)


-----------------------------------------------------
1.2749999999999999

(所影响的行数为 1 行)

孤独加百列 2012-06-19
  • 打赏
  • 举报
回复
问题出在float类型上,float本身存储数据就是不准确的,你赋值是1.575可能实际上是1.574768655.。。建议使用DECIMAL类型的存储
sundayzhao 2012-06-19
  • 打赏
  • 举报
回复
float 本身就是近似值,用decimal,如果保证小数点位数不超过4位,money是不二的选择
Felixzhaowenzhong 2012-06-19
  • 打赏
  • 举报
回复
DECLARE @f1 decimal(18,2)
SET @f1 = 1.575
SELECT @f1 ,
ROUND(@f1, 2)
DECLARE @f2 decimal(18,2)
SET @f2 = 1.475
SELECT @f2 ,
ROUND(@f2, 2)

DECLARE @f3 decimal(18,2)
SET @f3 = 1.175
SELECT @f3 ,
ROUND(@f3, 2)
--///////////////////
DECLARE @f1 numeric(18,2)
SET @f1 = 1.575
SELECT @f1 ,
ROUND(@f1, 2)
DECLARE @f2 numeric(18,2)
SET @f2 = 1.475
SELECT @f2 ,
ROUND(@f2, 2)

DECLARE @f3 numeric(18,2)
SET @f3 = 1.175
SELECT @f3 ,
ROUND(@f3, 2)



xuam 2012-06-19
  • 打赏
  • 举报
回复
不用float,用decimal

34,838

社区成员

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

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