即使字符串是一个十进制精度,_wtof准确度也不是全零

时间:2014-07-11 12:37:52

标签: c type-conversion

使用_wtof时,我没有在小数点右边找到一个有效数字。这是我的代码:

DOUBLE fVersion = 0.0;  // Initialize to zero; confirmed fVersion is 0.00000000000000000    
TCHAR sVersion[64] = {0};
_tcscpy_s(sVersion,64,L"1.1");
fVersion = _wtof(sVersion);

使用_wtof后,fVersion为1.1000000000000001,而不是1.1。

任何人都可以解释为什么?但最重要的是,如何修复它只是1.1?

1 个答案:

答案 0 :(得分:0)

您无法在二进制浮点中准确表示1/10(十进制)。因此,会出现错误。

考虑用十进制浮点表示1/3,最后得到0.3333333 ......它会永远持续下去,因为它也不可能。

典型的推荐读数为What Every Computer Scientist Should Know About Floating-Point Arithmetic。这真的非常好,给它一个阅读。