2016-09-19 9 views
2

Kann jemand einem Anfänger helfen? Wenn ich eine Zahl 4.561 habe, die von einer Gleichung abgeleitet wird, wie kann ich NUR die .561 anzeigen und die 4 ignorieren?Brauchen Sie Hilfe Formatierungsnummern C++

Vielen Dank im Voraus. Ich bin neu in der Programmierung und das ist Teil einer Aufgabe. Jede Hilfe würde sehr geschätzt werden. Ich kodiere in c++.

+0

Sie uns helfen helfen. Welche Sprache verwendest du? –

+0

Entschuldigung. Ich habe automatisch angenommen. Es ist C++. – Nick

+0

Es muss eine schöne Formatierung Weg, aber in einer Prise, wenn n = 4.561 Sie n-trunc (n) –

Antwort

1

Nicht sicher, ob dies erforderlich ist, aber überprüfen Sie dies.

float f = 4.561; 
f = f-(long)f; 
cout << "Value of f is : " << f << endl; 
1

Ich würde viel besser fühlen, mit der Verwendung von floor von math.h:

f = 4.561 
if (f>=0) f=f-floor(f); 
else  f=f-ceil(f); 
// here f = 0.561 

aus diesen Gründen:

  1. Wie Sie haben keine Kontrolle über Gießen Integral-Typ (f-long(f)) zumindest weiß ich nicht, ob es eindeutig als ein Standard definiert ist, der ganzzahligen Teil oder Rundung verwendet. Ganz zu schweigen von der Implementierung von benutzerdefinierten Typen.

  2. Was ist, wenn Ihr Gleitkommawert eine größere Zahl enthält als Ihr Integraltyp? Ich weiß, es gibt nicht so viele Mantissen-Bits für gebrochene Teile für größere Zahlen, aber Sie haben nicht angegeben, welchen schwebenden Datentyp Sie verwenden, wenn 32/64/80/128/256 Bits oder mehr so ​​schwer zu sagen sind und wenn der ganzzahlige Teil ist größer als Ihr integraler Datentyp, der verwendet wird, um den nicht-gebrochenen Teil abzuschneiden, dann wären Sie in Schwierigkeiten mit f-long(f).

PS.

Die if-Anweisung konnte vermieden werden, indem das Vorzeichenbit vor und nach der Operation ein- und ausgeblendet wird. Zum Beispiel auf Standard-32-Bit-Float sieht es wie folgt aus:

float f=4.561;   // input value 
DWORD *dw=(DWORD*)(&f); // pointer to f as integer type to access bits 
DWORD m;    // sign storage 
m=(*dw)&0x80000000; // store sign bit to m 
(*dw)&= 0x7FFFFFFF; // f=fabs(f) 
f-=floor(f); 
(*dw)|=m;    // restore original sign from m 
// here f = 0.561 

Wenn Sie nicht DWORD jede unsigned 32-Bit-Integer verwenden stattdessen