2017-08-25 2 views
2

Zum Beispiel auf Integer,Wie Fortran konvertieren eine reelle Zahl

SUBROUTINE DoSomething (Z,L)        
    IMPLICIT DOUBLE PRECISION (A-H,O-Z)        

    D=Z*77.1234567D0           
    L=D              

    RETURN               
END  

Und für Zwecke sprechen, wollen wir annehmen, D zu -1,5, wäre in diesem Fall L gleich zu -1 gleich oder -2. Mit anderen Worten, wird abgerundet oder abgerundet?

Vielen Dank im Voraus.

+0

Ich bin ein Vintage-Code zu lesen und ich habe keine Möglichkeit, es zu kompilieren. Das Beste, was ich tun kann, ist einen Online-Compiler zu verwenden, aber ich glaube, dass Fortran 95, denke ich. Ich will nur sicher sein, also kann vielleicht jemand hineinspielen. – LionsFan

+0

Fortran wird einfach den Bruchteil der Zahl verwerfen, so dass "-3.7" zu "-3" wird, "0.4" wird "0", "1.25" wird " 1' und so weiter. –

+0

Wenn es sich nicht um eine einmalige Sache handelt, sollten Sie einfach einen kostenlosen Compiler herunterladen. – Evan

Antwort

5

Die Konvertierung in einen Integer-Typ für die Zuweisung folgt der Verwendung der intrinsischen Funktion int. Der Effekt ist definiert als (F2008 13.7.81)

Wenn A vom Typ real ist, gibt es zwei Fälle: wenn | A | < 1, INT (A) hat den Wert 0; wenn | A | ≥1, INT (A) ist die ganze Zahl, deren Betrag die größte ganze Zahl, die nicht die Größe eines nicht überschreitet und dessen Vorzeichen ist das gleiche wie das Vorzeichen von A.

In diesem Fall wird dann, L wird Nimm den Wert -1.

+0

Vielen Dank, sehr informative Antwort. – LionsFan

1

Verwenden Sie entweder NINT(), die die nächste ganze Zahl ist, oder INT(). INT() gibt nur den vorzeichenbehafteten ganzzahligen Teil einer Zahl zurück. NINT() funktioniert wie folgt:

Wenn a größer als Null ist, hat NINT (a) den Wert INT (a + 0,5); Wenn a kleiner oder gleich Null ist, hat NINT (a) den Wert INT (a - 0,5).

Insbesondere NINT(0.5d0) = 1

Verwandte Themen