请教一个VC下小数点后自动截断的问题 我用的VC2005,使用一个开发包进行开发,发现了如下问题:假设有这样一段代码:double a = 10000.f;a = a + 0.000001;这样一段代码如果放在InitEngine()之前运行,最后a的结果就是10000.000001,如果放在InitEngine()之后运行,结果就是10000.000000f。InitEngine()是开发包里面的引擎初始化调用。请问为什么会产生这样的误差?InitEngine()里面做了什么使得小数后面的精度改变了? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 也许跟INIT没关系,小数在机器里就是不能精确表示。小数点以后那么多位是绝对不能用的,任何比较判断都可能出错,就当那是假的,伪的,骗人的好了。如果一定要用,可以把数据放大10000倍,转化成LONG,INT等整数类型,存储的时候用整形,表示的时候用小数。比如,深度用234.567米是不精确的,而234567毫米是精确的。存储在文件里一定用毫米,表示在界面上换算成小数。 才11位, 精度足够以下为变量储存的内存情况a:10000.00000000000000: 00 00 00 00 00 88 C3 40b:10000.00000100000000: 7C 63 08 00 00 88 C3 40楼主是用什么方法查看结果的?? 可能方法不准确 我就是在Watch里面查看的,并没有跑到Memory里面去看关键是这种误差会直接导致我后面比较大小的条件语句出现错误~哎,好郁闷啊我在使用老版本开发包的时候没有这个问题,使用新版开发包的时候就会出现这个问题 我也遇到了这样的问题,请问如何解决呢?开始是:float A=10.0e-6;float B=A*0.5f...但是在Watch里看到的A=9.9999997e-006B=4.9999999e-006这样的误差会导致后面的运算和比较大小的条件语句。请问如何解决呢?由于数量级比较小,其实我只希望A,B能保留小数点后1-2位就行了,既比如A=1.00e-5 B=0.50e-6这样精度就够了。谢谢 求助 CReBar 更改背景 钩子安装失败,SetWindowsHookEx返回值0 create方面的问题,关于访问权限的提升,困扰很久了!也是公司的一个技术难点了。 UDP广播得到客户端数量??? VC嵌入VC超级难题 关于GDI+中字体相关的一个很奇怪的问题,急盼答案,感谢! 求MSDN的中文版帮助,给分 为什么我的Receive函数会发生内存泄漏? 考MCSD有什么好处? 那有像icq那样靠边的程序代码例子?急!!!! 急求B样条曲线的代码VC++的 注册表访问问题...急、急、急
如果一定要用,可以把数据放大10000倍,转化成LONG,INT等整数类型,存储的时候用整形,表示的时候用小数。
比如,深度用234.567米是不精确的,而234567毫米是精确的。存储在文件里一定用毫米,表示在界面上换算成小数。
以下为变量储存的内存情况
a:10000.000000
00000000: 00 00 00 00 00 88 C3 40
b:10000.000001
00000000: 7C 63 08 00 00 88 C3 40楼主是用什么方法查看结果的?? 可能方法不准确
关键是这种误差会直接导致我后面比较大小的条件语句出现错误~
哎,好郁闷啊
我在使用老版本开发包的时候没有这个问题,使用新版开发包的时候就会出现这个问题
我也遇到了这样的问题,请问如何解决呢?
开始是:float A=10.0e-6;
float B=A*0.5f
...
但是在Watch里看到的A=9.9999997e-006
B=4.9999999e-006这样的误差会导致后面的运算和比较大小的条件语句。
请问如何解决呢?
由于数量级比较小,其实我只希望A,B能保留小数点后1-2位就行了,既比如A=1.00e-5 B=0.50e-6这样精度就够了。谢谢