【重大发现】VB算数逻辑问题2.6-2=0.5999999 有高手解释下吗

TimLee✿ 2008-08-22 07:12:04
有兴趣的去试试吧....期待解释...

Private Sub Form_Load()
Dim a As Single, b As Single, c As Single
a = 2.6
b = 2
c = a - b
MsgBox c

End Sub
...全文
287 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
MING_10 2008-11-01
  • 打赏
  • 举报
回复
我是白菜来看
mokton 2008-09-02
  • 打赏
  • 举报
回复
存储位数的限制,致使浮点数有误差
dbcontrol 2008-09-02
  • 打赏
  • 举报
回复
见多了就习惯了,知道那么多解释浪费多少脑细胞啊

[Quote=引用楼主 TalentLi 的帖子:]
有兴趣的去试试吧....期待解释...

VB code
Private Sub Form_Load()
Dim a As Single, b As Single, c As Single
a = 2.6
b = 2
c = a - b
MsgBox c

End Sub
[/Quote]
yachong 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 qiu5208 的回复:]
就是实际和理论的区别。
[/Quote]
这个问题,理论与实际是相符的
qiu5208 2008-09-01
  • 打赏
  • 举报
回复
就是实际和理论的区别。
zdingyun 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 TalentLi 的回复:]
引用 12 楼 jennyvenus 的回复:
引用 4 楼 laviewpbt 的回复:
希望楼主明年看到此贴是笑而不是哭

什么意思...这么深奥....
[/Quote]

不明白楼主的:什么意思...这么深奥....
TimLee✿ 2008-09-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jennyvenus 的回复:]
引用 4 楼 laviewpbt 的回复:
希望楼主明年看到此贴是笑而不是哭
[/Quote]
什么意思...这么深奥....
东方之珠 2008-08-28
  • 打赏
  • 举报
回复
这没什么奇怪的,浮点数是有误差的. 比如:1=0.9999999999999999

yangao 2008-08-28
  • 打赏
  • 举报
回复
竟然菜发现~
重庆-老白 2008-08-24
  • 打赏
  • 举报
回复
什么时候用single,什么时候用double的问题
chenhui530 2008-08-23
  • 打赏
  • 举报
回复
我不是给出原因了吗
你们仔细看下MSDN吧

Private Sub Form_Load()
Dim a As Single, b As Single, c As Single
a = 2.6
b = 2!
c = a - b
MsgBox c

End Sub
LUOLZD001 2008-08-23
  • 打赏
  • 举报
回复
变量声明为双精度,结果为0.6
fvflove 2008-08-23
  • 打赏
  • 举报
回复
浮点数有误差

我不同意.我更同意. 对于有小数位的数据的存储方式的影响.
(我看要理解 双精度 与 单精度 了)
2.0E-3 (如果存储方式是这种方式的话,是不是双精度,前面与后面都保证精度,单精度只保证一个地方.)


Double(双精度浮点型) 也是浮点数.
'*****************
Dim a As Double, b As Double, c As Double
a = 2.6
b = 2
c = a - b
MsgBox c
'返回的是 0.6
'**********************
_l_ 2008-08-23
  • 打赏
  • 举报
回复
用别的语言也一样的
_l_ 2008-08-23
  • 打赏
  • 举报
回复
浮点数有误差 486时代就有过的
用户 昵称 2008-08-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 laviewpbt 的回复:]
希望楼主明年看到此贴是笑而不是哭
[/Quote]
zdingyun 2008-08-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yachong 的回复:]
浮点数有误差,基础知识
[/Quote]
赞同3 楼 yachong及6楼的观点,那是芯片浮点运算的问题,与VB本身似乎无关.
至于单精度浮点数在内存的储存形式
Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
在内存以32位二进制形式存在:
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
第1位为符号位
第2-9位为阶码位
第10-32位为2进制小数尾值
即F2 ^ n * 1. XXXXXXX XXXXXXXX XXXXXXXX
其中
F为正号或负号(首为为0正数,首位为1负数
n为2-9位组成的BYTE数据值
XXXXXXX XXXXXXXX XXXXXXXX为尾数
详细请参阅本人的BLOG文章:
http://blog.csdn.net/zdingyun/archive/2008/06/09/2528026.aspx
  • 打赏
  • 举报
回复
小数不超过4位的 可以改为Currency 类型来计算
laviewpbt 2008-08-22
  • 打赏
  • 举报
回复
希望楼主明年看到此贴是笑而不是哭
yachong 2008-08-22
  • 打赏
  • 举报
回复
浮点数有误差,基础知识
加载更多回复(2)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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