ich bauen und den folgenden Code auf zwei verschiedenen Betriebssystemen laufen:Code :: Blocks printf Doppel mit festen Präzision in Windows
#include <bits/stdc++.h>
using namespace std;
int main(){
double d=1.123456;
printf("%.5lf ",d);
cout<<fixed<<setprecision(5)<<d;
return 0;
}
Code :: Blocks in Ubuntu Ausgänge: 1.12346 1.12346
(wie erwartet)
Code :: Blocks in Windows-Ausgänge: 0.00000 1.12346
(warum 0.00000
!!!)
Sie haben recht, es sollte "% .5f" statt "% .5lf" sein, aber funktioniert es auch in Visual Studio? !! Ich brauche den wahren Grund, warum es gut funktioniert. Danke im Voraus. – Abdulkader
Fügen Sie einen Ausdruck hinzu ("sizeof (double):% u, sizeof (lang doppelt):% u \ n", sizeof (double), sizeof (long double)); und sehen, ob Double und Long double verschiedene Größen haben, wenn sie das tun, dann würde ich erwarten, den lf Formatbezeichner mit einem double zu verwenden, um das falsche Ergebnis zu drucken. – SoronelHaetir
Laut der [Dok. Ich muss Hand() (http://en.cppreference.com/w/cpp/io/c/fprintf) das Kleinbuchstabe 'l' ist im Wesentlichen überflüssig (wie von 'C++ 11') und nimmt ein" doppeltes "an 'argument - ein' long double' Argument benötigt einen Großbuchstaben 'L' wie in '"% .5Lf "'. –