当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 不知大家碰到过这个问题没有,就是当你用两个double值进行计算后,当你想将结果输出时,却得不到希望的结果。
 

 

 ·vc菜谱详解--udp的服务端    »显示摘要«
    摘要: windows socket是基于伯克利的unix socket的。微软的mfc提供了两种类来支持socket编程。csocket类为网络编程提供了高级别抽象。一个socket是有一种类型的并且与某个process相结合在一起。两类socket都是双向的:可以同时在两个方向进行数据上的交互。两类socket是可用的的:stream sockets:可以提供数据流而且不需要记录边界—&......
    摘要: 当在c中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ansi c对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ansi c保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首地址等......


double值格式化输出的精度问题解决

不知大家碰到过这个问题没有,就是当你用两个double值进行计算后,

在windows时提供了api解决此问题:(mfc或标准c++好象都没找到 【程序编程相关:获得指定目录下的所有文件的方法!

当你想将结果输出时,却得不到希望的结果.反正与想象的不一样, 【推荐阅读:得到电脑的信息

示例如下: 【扩展信息:网卡MAC地址相关信息大全(整理)(上)

简单的解决办法)

double d = 5 - 4.99;

d应该是等于0.1吧,跟踪一下程序,发现不是,显示的值是0.0099999999999997868

(不知道vc的调试器是如何显示这个得到的double值的?)

好,我们来开始尝试输出:

1:使用 %f

char szbuff[50];

sprintf(szbuff,"%f",d);

cout<<szbuff<<endl;

输出:

0.010000 显然不对,加%.2f呢,你咋知道应该是2呢?其它参数呢,不行,因为它是

强制指定精度的.

2:使用 %g

输出:0.01

对了,不过,别急,你再试试 d = 0.123456789

它的输出是 0.1234567,后两位被去掉了.居然连四舍五入都不做.

加参数呢,试试%.15g

输出:哇:0.00999999999999979

这倒是与vc调试器看到的结果有些相似.

怎么办呢?

windows提供了一个函数,可以处理这个问题:varformat


...   下一页
 ·mfc dll向导(二)    »显示摘要«
    摘要: 使用dll的一个比较严重的问题就是编译器之间的兼容性问题。不同的编译器对c++函数在二进制级别的实现方式是不同的。所以对基于c++的dll,如果编译器不同就有很麻烦的。如果创建的是mfc扩展dll,就不会存在问题,因为它只能被动态连接到mfc的客户应用程序。这里不是本文讨论的重点。一、重新编译问题我们先来看一个在实际中可能遇到的问题: 比如现在建立好了一个dll导出了cmyclass类,客户也......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE