Frage

Ich brauche die genaue Länge einer Zeichenfolge angeben, aus einem doppelten Wert gedruckt werden, aber ich will nicht den Ausgang beschränken mehr als notwendig ist.

Was ist die maximale Länge, die ein 6-stellige Präzision Doppel wird, wenn sie von printf formatiert haben ()?

Insbesondere welcher Wert soll ich zu X gebe in printf("%X.6lg",doubleValue); um sicherzustellen, dass kein Wert abgeschnitten wird?

Der Grund, warum ich bestimmt über die Länge zu sein brauche, ist, dass ich einen MPI abgeleiteter Datentyp bin definieren, von vielen Stringdarstellungen von Doppelwerten gebildet und muß ihre genaue Länge kennen, um Bereiche der Datei zwischen MPI Prozessen aufteilen .

Ich hoffe, das ist klar. Vielen Dank im Voraus für die Beantwortung.

War es hilfreich?

Lösung

Verwendung printf("%.6g", doubleValue) oder printf("%.6Lg", doubleValue)
Beachten Sie, dass die führenden Ziffern (die „Breite“) in den Genauigkeitsbezeichner macht keine Anforderungen an die Länge des integralen Teil des Wertes Weglassen.
Beachten Sie auch, dass das Untergehäuse „l“ wird angegeben, dass Ihr Wert ein long int ist. Die Großbuchstaben „L“ gibt einen langen doppelten Wert.
Beachten Sie auch, dass, wenn Sie dies nicht möchten möglicherweise auf wissenschaftliche Schreibweise geändert werden (wenn es eine kürzere Darstellung ist), dann würden Sie „f“ verwenden anstelle von "g".
Siehe printf Referenz hier .

Andere Tipps

Der maximale Exponent einer IEEE Doppel 1023, so größte Doppel wird 1 + 1/2 + 1/4 + 1/8 + ... usw. * 2 ^ 1023. Welche wird über 318 Zeichen lang sein, in Dezimalnotation sein.

Warum nicht verwenden, um die "e" Formatbezeichner?

Es gibt viele nützliche Werte enthält, darunter DECIMAL_DIG, die für a long double jedoch.

Die gleiche Datei wird wahrscheinlich Ihnen sagen, dass ein Doppel auf Ihrer Plattform verfügt über mehr als 6 Ziffern der Präzision ...

PS: Beachten Sie auch Demi Antwort oben. Er weist darauf hin, verschiedene Mängel in Ihrem printf (), die mir entgangen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top