【问题标题】:CString to Float conversionCString 到浮点数的转换
【发布时间】: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


【解决方案1】:

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

使用这种存储格式,不可能精确地表示十进制数。这就是为什么货币计算通常使用特殊的十进制类型,这些类型要么是自定义的,要么是编程语言的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2016-03-17
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多