【问题标题】:Code::Blocks printf double with fixed precision in WindowsCode::Blocks printf double 在 Windows 中具有固定精度
【发布时间】:2017-12-24 22:36:45
【问题描述】:

我在两个不同的操作系统上构建并运行以下代码:

#include <bits/stdc++.h>
using namespace std;

int main(){

    double d=1.123456;
    printf("%.5lf ",d);
    cout<<fixed<<setprecision(5)<<d;

    return 0;
}

Ubuntu 输出中的 Code::Blocks:1.12346 1.12346(如预期的那样)

Windows 输出中的代码::块:0.00000 1.12346(为什么是0.00000 !!!)

【问题讨论】:

    标签: c++ printf double codeblocks precision


    【解决方案1】:

    对于 printf 调用,您表明您正在传递一个 long double(带有 'lf')但只传递一个 double,它在 ubuntu 上工作的事实是一个意外,而不是表明它是正确的。

    如果您使用 %.5f 而不是 %.5lf 它应该适用于两种情况。

    【讨论】:

    • 你说得对,它应该是“%.5f”而不是“%.5lf”,但它在 Visual Studio 中也能偶然工作吗?!!我需要它工作正常的真正原因。提前致谢。
    • 添加一个 printf("sizeof(double): %u, sizeof(long double): %u\n", sizeof(double), sizeof(long double));看看 double 和 long double 是否有不同的大小,如果有,那么我希望使用带 double 的 lf 格式说明符来打印错误的结果。
    • 根据docs. I have to hand,小写'l'本质上是多余的(截至c++11)并假定double参数-long double参数需要大写'L ' 如"%.5Lf".
    • scanf("%lf",&amp;d) ,但 printf("%f",d) 其中 d 是双变量!!。据cplusplus.com:linklink
    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-12
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多