使用_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?
答案 0 :(得分:0)
您无法在二进制浮点中准确表示1/10(十进制)。因此,会出现错误。
考虑用十进制浮点表示1/3,最后得到0.3333333 ......它会永远持续下去,因为它也不可能。
典型的推荐读数为What Every Computer Scientist Should Know About Floating-Point Arithmetic。这真的非常好,给它一个阅读。