C ++不显示带小数字的数字

时间:2014-02-10 17:51:03

标签: c++ double decimal

我写了一个程序,结果让我感到奇怪 我有一个带有3位小数的double数字,但我需要将其更改为2位小数 首先我将它乘以100,然后我将其改为int,然后我将其除以100,但我不知道为什么 结果是错误的

输入:9.857
输出为:9.8499999999999996

这是我的代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    double sum = 9.857, temp = 0;
    temp = int(sum * 100);
    temp = int(temp);
    sum = temp / 100;
    printf("%.16f\n", sum);
}

输入:9.857
输出为:9.850000000000000

第二段代码:

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    double sum = 9.857, temp = 0;
    temp = int(sum * 100);
    temp = int(temp);
    sum = temp / 100;
    printf("%.15f\n", sum);
}

为什么这两个代码段的答案不同?

1 个答案:

答案 0 :(得分:4)

除了浮点运算之外,您还使用了不安全的printf系列函数,尽管包括<iostream>。在C ++中限制输出值精度的正确方法是设置ostream的精度值:

Example

#include <iostream>

int main()
{
    double sum = 9.857, temp = 0;
    std::cout.precision(4);
    std::cout << "Value = " << sum << std::endl;
    std::cout.precision(3);
    std::cout << "Value = " << sum << std::endl;
    std::cout.precision(2);
    std::cout << "Value = " << sum << std::endl;
    return 0;
}

如果您想在C中执行此操作,它将如下所示:

Example

#include <stdio.h>

int main()
{
    double sum = 9.857, temp = 0;
    printf("Value = %.3f\n", sum);
    printf("Value = %.2f\n", sum);
    return 0;
}

如果您正在寻找精确值,浮点类型由于存储方式而不是正确的类型(它们不准确)。这意味着在许多情况下,尝试显示小数点后的15位数字可能不会给出与输入相同的结果。