【发布时间】:2014-01-08 12:48:38
【问题描述】:
一个常见问题,可能是我在这一点上错了,但在谷歌上的最后两个小时没有给我任何答案, 问题是如何在不使用 c++ 中的 std: library 的情况下将 CString 转换为 float。
我尝试使用 wcstod() 函数,但是,这个函数的行为非常不同。 请找到以下代码,
CString Tempconvert = "32.001";
double TempConvertedValue = wcstod(Tempconvert,NULL);
所以,最后 TempConvertedValue 的值应该是 32.001。但我得到 TempConvertedValue = 32.000999999999998 请为我提供任何转换的帮助 字符串“32.001”仅浮动 32.001。不使用 std: library。
【问题讨论】:
-
看起来某处有一个浮点数(而不是双精度数)。浮点数不能准确表达 32.001,但双精度可以。 wcstod 返回一个双倍,所以问题不应该存在。如何输出值?
-
std库有什么问题? -
@JoelKlinghed 这不是真的,double 不能完全表达浮点值,因为它使用与浮点数相同的编码,但具有更多位,因此它可以保持更大的值和更高的精度.
-
@EricFortin,是的,这确实是一个错误的选择。我的意思是:float f = 32.001f;双 d = 32.001; printf("%f %f", f, d);将打印“32.000999 32.001000”,即双精度足以保持 32.001
-
@JoelKlinghed 感谢您的回复首先 32.001 是一个双精度值。我只是想将字符串转换为双精度。而我没有得到点“你如何输出值?”。
标签: c++ visual-c++ mfc type-conversion