| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 356 人关注过本帖
标题:数值相减问题
收藏  订阅  推荐  打印 
dawn4640576
Rank: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19
数值相减问题

我定义了一个字符类型数组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: 8Rank: 8
来自:passerby
等级:论坛元老
威望:8
帖子:3893
积分:40493
注册:2007-6-13

MsgBox Format(CDbl(sweight) - CDbl(shuzu(1,2)), "##.#0")


I am a wanderer. Oftentimes it seems that I walk the earth among pygmies. PS:換號使用中
2007-10-26 12:54
随风逐流
Rank: 8Rank: 8
来自:passerby
等级:论坛元老
威望:8
帖子:3893
积分:40493
注册:2007-6-13

如果保留3位小数的话
"##.#0"换成"##.#00"


I am a wanderer. Oftentimes it seems that I walk the earth among pygmies. PS:換號使用中
2007-10-26 12:55
dawn4640576
Rank: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19

嗯,谢谢!
我想问一下为什么
就算我用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: 8Rank: 8
来自:passerby
等级:论坛元老
威望:8
帖子:3893
积分:40493
注册:2007-6-13

首先,为什么会出现这个情况,我个人观点是这样:Double类型可以存储范围最大的数字.在内存中占用8个字.所以它的精度是很差的,这样导致计算的时候存在误差.
这个问题不光是在VB里面有,我在C#.NET2005里面也遇到过这样的问题.


I am a wanderer. Oftentimes it seems that I walk the earth among pygmies. PS:換號使用中
2007-10-26 13:19
dawn4640576
Rank: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19

嗯.
在内存中占用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: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19

就是像上面那样就行是不?
先试试.

我看青山多妩媚料青山看我应如是
2007-10-26 13:49
缘吇弹
Rank: 12Rank: 12Rank: 12
来自:A与C之间
等级:版主
威望:43
帖子:3024
积分:33034
注册:2007-7-2

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


Repeat  Life=Study;Until (death);        //<a href="http://hi.baidu.com/yzidan" target="_blank"><font color="green">***>[B]欢 迎 光 临 我 的 博 客[/B]
2007-10-26 13:56
dawn4640576
Rank: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19

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


我看青山多妩媚料青山看我应如是
2007-10-26 14:00
dawn4640576
Rank: 6Rank: 6
等级:金牌会员
帖子:1076
积分:11562
注册:2007-9-19

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


我看青山多妩媚料青山看我应如是
2007-10-26 14:02
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.067164 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved