ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 707|回复: 6

[讨论] 为何Single类型的数据对单元格赋值后,浮点误差怎么会这么大?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-12-4 22:39 | 显示全部楼层 |阅读模式
本帖最后由 水和米 于 2020-12-5 12:28 编辑

Single类型的数值的比Double类型的数值更容易产生浮点误差不奇怪
奇怪的是为什么都对它进行Round一位小数函数处理了
单元格最后得到的值还是保留了浮点误差值呢?

微信截图_20201204223305.png

TA的精华主题

TA的得分主题

发表于 2020-12-5 08:43 | 显示全部楼层
这个东东还真无解,不知道为何

TA的精华主题

TA的得分主题

发表于 2020-12-5 09:51 | 显示全部楼层
因为Double表示不了Single的精确度,所以只好用相近值来表示Single了

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-5 12:30 | 显示全部楼层
joforn 发表于 2020-12-5 09:51
因为Double表示不了Single的精确度,所以只好用相近值来表示Single了

老师,确实我这里后面这句:奇怪的是为什么都对它进行Round一位小数函数处理了 是重点哦

TA的精华主题

TA的得分主题

发表于 2020-12-5 13:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 joforn 于 2020-12-5 13:07 编辑
水和米 发表于 2020-12-5 12:30
老师,确实我这里后面这句:奇怪的是为什么都对它进行Round一位小数函数处理了 是重点哦

  1. Sub Test()
  2.   Dim sngVar  As Single
  3.   Dim dblVar  As Double
  4.   Dim varVar  As Variant
  5.   
  6.   sngVar = 1.1
  7.   dblVar = sngVar
  8.   Debug.Print Format(dblVar, "#0.0000000000000000")
  9.   dblVar = Round(sngVar, 1)
  10.   Debug.Print Format(dblVar, "#0.0000000000000000")
  11.   
  12.   varVar = Round(sngVar, 1)
  13.   Debug.Print "Round(Single,1)返回的类型是:" & TypeName(varVar)
  14.   varVar = Round(dblVar, 1)
  15.   Debug.Print "Round(Double,1)返回的类型是:" & TypeName(dblVar)
  16.   
  17.   Range("A1") = Round(sngVar, 1)
  18.   Range("A2") = dblVar
  19.   
  20.   Range("A3") = Round(CDbl(sngVar), 1)
  21.   Range("A4") = Format$(sngVar, "#0.0")
  22. End Sub
复制代码

运行一下上面的代码就明白了。

TA的精华主题

TA的得分主题

发表于 2020-12-5 13:15 | 显示全部楼层
写代码时不要一厢情愿,意想天开。特别是像这种底层的内置函数,要自己多方面去测试。
我看你对Single转成Double后精度丢失是有所了解的,但你是自以为Round(Single,1)返回的值就能变成了Double?事实是Round(Single,1)后返回的值还是单精度的1.1,跟你直接把单精度的1.1赋值给一个Double没有一点区别。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-5 13:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
joforn 发表于 2020-12-5 13:15
写代码时不要一厢情愿,意想天开。特别是像这种底层的内置函数,要自己多方面去测试。
我看你对Single转成 ...

感谢斑竹,学习了,我会好好领悟的~~~
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 02:21 , Processed in 0.043163 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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