双数据类型的解释错误

时间:2014-08-08 17:52:04

标签: c++ visual-c++

我使用键盘上的double读取std::cin值,值为1.15。当我在读取值后放置一个断点,visual studio显示该值为1.14999999。但如果我打印它在我的控制台上打印1.15。后来我写了下面的代码,但效果不好

int main()
{
    long double valueA;
    int required;
    std::cin>>valueA;
    required=(valueA*10000)-(((int)valueA)*10000);
    std::cout<<(required);
}

当输入为1.015时,输出为149,但预期输出为150.为什么我的编译器将1.015视为1.014999999?我该如何纠正这个错误?

1 个答案:

答案 0 :(得分:2)

您所描述的是浮点错误。这是因为浮点在硬件级别表示的方式(参见here)。基本上浮点数保持为sme并重建为s * m * 2 ^ e其中^是幂的幂,如果s位为0则s为1,如果s位为1则s为-1。

如果你需要那种精确度,你可以使用一个十进制算术库,它或多或少是相同的东西,但不是使用2的幂,它们使用10的幂,因为它们是用软件实现的,它意味着它们可以具有任意精度(更多关于here)。

以下是可以使用的实现十进制算术的库列表:

相关问题