标题:有关于单精度小数在excel中的累加问题
只看楼主
rootsucn
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-31
结帖率:28.57%
已结贴  问题点数:20 回复次数:4 
有关于单精度小数在excel中的累加问题
Private Sub Timer1_Timer()
   
    Static ElapsedTime As Single
    ElapsedTime = ElapsedTime + 0.1
    If LeftPictureBox_RUNNING = True Then
    Buffer = ElapsedTime & "," & CoordinatesX & "," & CoordinatesY   
    ElseIf RightPictureBox_RUNNING = True Then
    Buffer = ElapsedTime & "," & "," & "," & CoordinatesX & "," & CoordinatesY   
    End If
    TxtFile.WriteLine (Buffer)
End Sub

如图所示,在Timer中进行每次0.1的累加,结果竟然到了2.7的时候,2.7+0.1变成了2.799999
如何解决该问题,敬请各位大侠不吝赐教!!!

搜索更多相关主题的帖子: 累加 excel 小数 单精度 
2010-09-07 14:12
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
这是正常的现象.

要解决这个问题,设置这列单元格为 数值类型,小数点后1位就可以了
如果需要使用 修正后的数据计算,那么再到选项时选使用显示的数据计算就可以了.

或者在程序里,给值时,转化为 字符串类型的小数,然后再填到单元格内去.

这属于浮点数 二进制与十进制 换算 精度问题.




授人于鱼,不如授人于渔
早已停用QQ了
2010-09-07 16:05
rootsucn
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-31
得分:0 
回复 2楼 风吹过b
非常感谢您的回答。
可是
这个文件是我以
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set TxtFile = FSO.CreateTextFile(Year(Date) & "擭" & Month(Date) & "寧" & Day(Date) & "擔" & "(" & WeekdayName(Weekday(Date), True) & ") " & Hour(time) & "帪" & Minute(time) & "暘" & ".csv", True)
    TxtFile.WriteLine "Time(s),X(Left),Y(Left),X(Right),Y(Right)"
    Timer1.Enabled = True

这种形式定义生成的
如何在生成之初,就不产生这种99999999999的小数呢??
还有,请问为何会产生这种99999999999的小数??

恳请不吝赐教!!!
2010-09-07 17:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:20 
产生的原因是:

浮点数 二进制与十进制 换算 时精度不一至导致的问题 .

浮点数,二进制 转换为 十进制时, 需要累除 存在除不尽的情况,导致 这种的情况出来.
具体的转换算法,记不清了.只知道是 累除 得出小数位.


授人于鱼,不如授人于渔
早已停用QQ了
2010-09-07 17:49
rootsucn
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-8-31
得分:0 
回复 4楼 风吹过b
您真是高人啊!!!!
不胜感激 ~~~
2010-09-08 15:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-319471-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.101913 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved