| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2770 人关注过本帖
标题:VB中如何解决浮点问题?
取消只看楼主 加入收藏
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
 问题点数:0 回复次数:8 
VB中如何解决浮点问题?
VB中如何解决浮点问题?
比如:
dim a as double
dim b as double
dim c as double
a=45.3
b=45
c=a-b
print c
此时C应该等于0.3,但是结果却是0.2999999.....
如何能够精确的表示出来呢?
在度分秒转换的时候出现的这个问题:比如我想转换45°30′00″成45.5°但是却表示成为45.51111111...
就是要解决这个问题,那位高手给个办法吧 谢谢啦!
搜索更多相关主题的帖子: VB中 点问题 分秒 doubledim 
2007-01-21 17:12
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
好象不行吧?
比如说45°30′00″转化成度应该是45.5°,我保留小数点后4位,应该是45.5000,可要是四舍五入的话就成了45.5111 还是不精确的
2007-01-25 10:35
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 

可要是把c的类型变换为double,又和原来的问题一样了,这个是什么原因?
我担心我程序里需要double类型的数据.

2007-01-25 10:58
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
我试试吧,我主要是涉及三角函数计算,在工程计算上使用.
2007-01-25 14:42
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
听周围同事说,产生这个的原因是:计算机由二进制转换成十进制时在表示上出现的不精确现象,不知道这个解释合理不?
反正我现在是想用最好的方法来得到尽可能精确的的数据....
2007-01-25 16:22
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 

我对楼上各位所给的方法进行了实验结果如下:
Dim a As Single
Dim b As Single
Dim c As Single
a = 45.3
b = 45
c = a - b
Print c
结果是:0.2999992
Dim a As Variant
Dim b As Variant
Dim c As Single
a = 45.3
b = 45
c = a - b
Print c
结果是:0.3
Dim a As Variant
Dim b As Variant
Dim c As Variant
a = 45.3
b = 45
c = a - b
Print c
结果是:0.299999999999997
第二种方法的结果是正确的,但是我觉得变量定义起来有点困难,因为变量要反复使用,总觉得Variant类型不可靠....(现在还没有出现具体的问题).

2007-01-25 16:34
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 

为什么用Msgbox就可以了?必须用吗?

2007-02-01 18:06
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
问题出来了!!

我现在写的是一个度分秒转化的例子:
不能得出正确答案~
Private Sub Command1_Click()
Dim ysjd As Single
Dim zhhjd As Single

ysjd = Val(Text1.Text)
zhhjd = DEG(ysjd)
Text2.Text = zhhjd
End Sub
--------------------------------------------------
Function DEG(de As Single) As Single
Dim d1 As Single
Dim d2 As Single
Dim d3 As Single
Dim sign As Integer
sign = Sgn(de)
de = Abs(de)
d1 = Int(de)
d2 = Int((de - d1) * 100)
d3 = (de - d1 - d2 / 100) * 10000
DEG = sign * (d1 + d2 / 60 + d3 / 3600)
End Function

程序说明:这是一个“度分秒”转化为“度”的程序,比如我输入40.3000,表示40°30′00″转化为40.5°
我现在输入的数据text1文本框是40.3000,转化结果却成了40.51111,我把数据类型改了几个都没有解决,怎么办呢,为了后边程序的使用,我必须要把这个DEG函数功能写到模块里边.

2007-02-08 17:32
wudimp
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-19
收藏
得分:0 
TO:hyhhd
首先认个老乡,我也是宝鸡的
你这个方法原理上是通过查找度分秒的符号来分别提取度和分,秒的数值,实验后好象有点问题,需要调试下.
2007-02-10 15:58
快速回复:VB中如何解决浮点问题?
数据加载中...
 
   



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

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