2017-12-24 17 views
0

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 !!!)

Antwort

1

Für die printf Sie zeigen, dass Sie einen langen Doppel sind vorbei (mit dem ‚lf‘), aber nur ein Doppelpass, die Tatsache, dass es funktioniert auf Ubuntu ist ein Unfall r ather als ein Hinweis darauf, dass es korrekt ist.

Wenn Sie% .5f statt% .5lf verwenden, sollte es in beiden Fällen funktionieren.

+0

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

+0

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

+0

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 "'. –

Verwandte Themen