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

NSnaiL 2012-06-19 02:52:14
据我所知四舍五入一般有两种规则
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 行受影响)
...全文
321 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
NSnaiL 2012-06-19
  • 打赏
  • 举报
回复
结贴了 关于这个问题的详细情况 请移步
http://www.oschina.net/question/171192_58329
NSnaiL 2012-06-19
  • 打赏
  • 举报
回复
问题是1.575一共只有4位有效数字, ieee754规定32bit浮点数有23个二进制有效数位换成10进制是7个有效数位

set @f = 1.575

从1.575的decimal数转换成float形式, 应保证1.575是精确部分而不是1.574999等类似数字的近似值


[Quote=引用 3 楼 的回复:]

浮点数的存储很特殊,大部分不能用精确值来判断,至于哪些浮点数可以是精确值,下面摘一段文字,地址
http://www.cnblogs.com/egust/articles/1793660.html

浮点数的储存方式则是符合IEEE 754标准的,按照这个标准,无法不通过FPU直接利用指针在不同精度的浮点类型之间转换。关于浮点数的储存方式,本文只作简单的原理性的介绍;有兴趣的话,可以参考w……
[/Quote]
wl0326 2012-06-19
  • 打赏
  • 举报
回复
不要用Round,这个不是很精确,你可以用这个方法String.Format("{0:F}", yxing_time)
xlong224 2012-06-19
  • 打赏
  • 举报
回复
很正常 精度问题 不是真实 是 1.575 后面还有N位的小数
ohkuy 2012-06-19
  • 打赏
  • 举报
回复
用decimal试了没?
cnwin 2012-06-19
  • 打赏
  • 举报
回复
嗯,与精度有关。
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 行)

EnForGrass 2012-06-19
  • 打赏
  • 举报
回复
float 和 real
用于表示浮点数字数据的近似数字数据类型。浮点数据为近似值;并非数据类型范围内的所有数据都能精确地表示。
float 和 real一般用在对数据没有严格精确性要求的情况, 例如做服务器性能监控, 对于性能指标的值一般用 float, 因为这类值并不需要很精确, 而且有的性能指标的值非常大.
要达到精确性,一般都用有精确性的 decimal/numeric,
bdmh 2012-06-19
  • 打赏
  • 举报
回复
浮点数的存储很特殊,大部分不能用精确值来判断,至于哪些浮点数可以是精确值,下面摘一段文字,地址
http://www.cnblogs.com/egust/articles/1793660.html

浮点数的储存方式则是符合IEEE 754标准的,按照这个标准,无法不通过FPU直接利用指针在不同精度的浮点类型之间转换。关于浮点数的储存方式,本文只作简单的原理性的介绍;有兴趣的话,可以参考wikipedia关于IEEE 754的介绍(英文,中文),去了解更详细的内容。
介绍浮点数类型也是为了说明一个在许多教材中、或是文章中语焉不详的内容:为什么浮点数无法精确表示一些实数,为什么运算后会存在误差,以及在哪些情况下是没有误差的。首先,浮点数由三个部分组成,能表示一定范围内的一个实数,包括0、无穷与NaN(Not a Number)。
浮点数要能表示正数与负数,所以需要占用一位(Bit)来记录符号,也就是IEEE 754浮点数类型的第一部分:符号位。从字面上理解,浮点数要有一个浮动的小数点,也就是指定该实数的指数——第二部分可以理解成主要起这个作用。要注意的是,在计算机中的“指数”的底数,并不是我们日常10进制所使用的10,而是2。换句话说,我们平时的0.125可以写成1.25*10^-1,而在计算机中,要把它变成2进制,也就是1*2^-3。第三部分则是小数位,用它加上1再乘以指数部分,得到的结果就是我们要表示的数。
那么接下来的问题是,浮点数类型能精确表示哪些数?先来考虑一个问题,二进制浮点数如何表示十进制中的0.1,也就是1*10-1?在浮点数中,指数位是2^N,所以0.1只能用2^E1+2^E2+...+2^En相加得出。这个问题可以先放一下,考虑一下2^N(N<0)都是哪些数:2^-1=0.5,2^-2=0.25,2^-3=0.125,2^-4=0.0625……因为10=2*5,所以10^N=2^N * 5^N,2^N=10^N / 5^N=10^N * 5^-N。所以,当N<0时,2^-x=5^x*10^-x,也就是说,二进制每多一位小数,十进制就会增加一位,并且新增的最右边的位是5。因此,十进制里的0.1无法用二进制的小数精确的表示,在二进制里,它是个无限小数。所以,对于浮点数准确性的结论就是:
只要换算为2进制后,是二进制的有理数,并且在数据精度范围之内,那么这个实数就是能用浮点数精确表示的。
天下如山 2012-06-19
  • 打赏
  • 举报
回复
额 没想过这个。
EnForGrass 2012-06-19
  • 打赏
  • 举报
回复
float类型本来都不精确,所以每次显示有差异
内容概要:本文详细介绍了MySQL中InnoDB存储引擎的逻辑存储结构及其表分区技术。InnoDB的逻辑存储单元由高到低依次为表空间、段、区、页和行,其中表空间包括系统表空间、独立表空间、通用表空间、Undo表空间和临时表空间,每种表空间具有不同的用途和管理方式。文章进一步讲解了表分区的概念与类型,包括RANGE、LIST、HASH、KEY以及多字段COLUMNS分区,阐述了分区的优势如提升查询性能、便于数据维护、支持跨物理设备存储等,并列举了实际SQL操作示例,帮助理解分区表的创建、修改、删除及重组等操作。同时指出了分区的限制条件,如最大分区数量、主键约束要求等。; 适合人群:具备一定MySQL数据库基础,从事数据库开发、运维或架构设计的技术人员,尤其是工作中涉及大数据量表管理与性能优化的1-3年经验研发人员。; 使用场景及目标:①深入理解InnoDB存储机制,优化数据库物理结构设计;②掌握表分区技术,应用于海量数据存储与高效查询场景,如日志系统、订单系统的时间分区设计;③通过分区实现数据归档、快速删除历史数据、提升查询性能等运维目标; 阅读建议:学习时应结合MySQL实际环境动手实践文中提供的SQL命令,重点关注表空间管理和分区策略的选择,理解其对性能和维护的影响,并注意分区使用中的限制条件以避免设计失误。
内容概要:本文系统介绍了GitHub Copilot的实战使用技巧,涵盖其核心功能、提示工程、上下文管理、自定义配置及常见误区。文章强调Copilot不仅是代码补全工具,更是覆盖软件开发全生命周期的AI编程助手,重点讲解如何通过上下文工程、提示词结构化、斜杠命令与聊天参与者等方式提升代码生成质量,并结合实战案例展示在测试生成、代码重构、调试、文档编写等场景中的高效应用。同时指出Copilot的局限性,倡导“人为主导、AI辅助”的协作模式,强调代码审查与安全合规的重要性。; 适合人群:具备一定编程经验,希望提升开发效率的个人开发者、团队工程师及技术管理者,尤其是正在使用或计划引入AI编程工具的研发人员。; 使用场景及目标:①掌握Copilot在测试生成、代码解释、重构优化、调试排错等方面的高级用法;②学会构建高质量提示词与自定义指令,使AI输出更贴合项目规范;③规避常见使用陷阱,实现安全、可控、高效的AI辅助开发。; 阅读建议:此文档兼具理论指导与实操示范,建议结合实际开发环境边学边练,重点关注提示工程、上下文管理与自定义指令配置,持续迭代优化使用方式,并在团队中建立统一的AI编码规范与审查机制。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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