2014-01-08 64 views
0

一个常见的问题,可能是我在这一点上是错误的,但在谷歌上最后两个小时不给我任何答案, 问题是如何将CString转换为float,而不使用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。

+0

它看起来有一个浮动(而不是双)在某处。花车不能完全表达32.001,但可以双重表示。 wcstod返回一个双重寿命,所以问题不应该在那里。你如何输出价值? –

+0

'std'库有什么问题? – herohuyongtao

+0

@JoelKlinghed这是不正确的,double不能完全表达浮点值,因为它使用与float相同类型的编码,但是具有更多位,因此它可以保持更大的值并具有更高的精度。 –

回答

1

你看到的是一个浮点内部表示的例子。你可以看看here来看看double是如何存储在内存中的。另请参阅this question以了解调试器为何显示此值。

使用这种存储格式,不可能完全表示一个十进制数。这就是为什么货币计算通常使用特殊的小数类型,既可以是自定义的也可以是编程语言的一部分