| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1522 人关注过本帖
标题:数值相减问题
只看楼主 加入收藏
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
 问题点数:0 回复次数:14 
数值相减问题

我定义了一个字符类型数组shuzu(1 to 1000,1 to 2)
然后从数据库中取出date和weight的数据
date 是nvarchar类型的
weight 是numeric类型的(5位有效数字,3位小数)
然后是这样赋值的

shuzu(1,1) = rs!date
shuzu(1,2) = rs!weight

前面我从数据库中取出了一个数值型的数据赋给了sweight
然后让sweight - shuzu(1,2)(这样减行不?还是需要在shuzu(1,2)前面加上val)
假设 sweight = 66.5 ,shuzu(1,2) = "65.56"

然后把他们减的差显示出来为什么是:0.9399999999999998 而不是0.94呢
该怎么改才能让他显示0.94?
谢谢!





搜索更多相关主题的帖子: 数值 数据库 shuzu weight date 
2007-10-26 11:02
随风逐流
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:passerby
等 级:版主
威 望:8
帖 子:4054
专家分:271
注 册:2007-6-13
收藏
得分:0 
MsgBox Format(CDbl(sweight) - CDbl(shuzu(1,2)), "##.#0")

[url=http://www./html/6/6694/]极道金丹[/url][url=http://www./html/2/2849/]九阴九阳[/url][url=http://www./html/2/2596/]凡人修仙传[/url]
2007-10-26 12:54
随风逐流
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:passerby
等 级:版主
威 望:8
帖 子:4054
专家分:271
注 册:2007-6-13
收藏
得分:0 
如果保留3位小数的话
"##.#0"换成"##.#00"

[url=http://www./html/6/6694/]极道金丹[/url][url=http://www./html/2/2849/]九阴九阳[/url][url=http://www./html/2/2596/]凡人修仙传[/url]
2007-10-26 12:55
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
得分:0 
嗯,谢谢!
我想问一下为什么
就算我用val(shuzu(1,2))
sweight的值为65.6
val(shuzu(1,2))的值为64.66
然后用sweight - val(shuzu(1,2))
结果却是0.9399999999999998
而不是0.94呢??

我看青山多妩媚料青山看我应如是
2007-10-26 13:09
随风逐流
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:passerby
等 级:版主
威 望:8
帖 子:4054
专家分:271
注 册:2007-6-13
收藏
得分:0 
首先,为什么会出现这个情况,我个人观点是这样:Double类型可以存储范围最大的数字.在内存中占用8个字.所以它的精度是很差的,这样导致计算的时候存在误差.
这个问题不光是在VB里面有,我在C#.NET2005里面也遇到过这样的问题.

[url=http://www./html/6/6694/]极道金丹[/url][url=http://www./html/2/2849/]九阴九阳[/url][url=http://www./html/2/2596/]凡人修仙传[/url]
2007-10-26 13:19
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
得分:0 
嗯.
在内存中占用8个字节吧
weight在SQL中是numeric类型的(5位有效数字,3位小数)
把它取出来放在string型数组中不会影响他的值吧?
然后再把他取出来转化成数值型.我用的是val转化的.我设置断点看他的值也是64.66
看sweight的值也是65.6
但是他们相减后差却不是0.94
面是0.9399999999999998
他们相减的时候是按double类型减的吗?
那怎样做才能让他显示0.94???

我看青山多妩媚料青山看我应如是
2007-10-26 13:41
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
得分:0 
就是像上面那样就行是不?
先试试.

我看青山多妩媚料青山看我应如是
2007-10-26 13:49
缘吇弹
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:地球
等 级:版主
威 望:43
帖 子:3038
专家分:27
注 册:2007-7-2
收藏
得分:0 

LZ可以试下:
MsgBox Format(val(sweight) - val(shuzu(1,2)), "##.#0")


Repeat  Life=Study;Until (death);
2007-10-26 13:56
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
得分:0 

两位版主的建议都试了.
不管是CDbl还是val


我看青山多妩媚料青山看我应如是
2007-10-26 14:00
dawn4640576
Rank: 1
等 级:新手上路
帖 子:1079
专家分:0
注 册:2007-9-19
收藏
得分:0 

不好意思.按回车了.
结果都是 .940
怎样让他显示0.940
to_char()吗??


我看青山多妩媚料青山看我应如是
2007-10-26 14:02
快速回复:数值相减问题
数据加载中...
 
   



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

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