Konvertiere Float in Integer in Rust

8
%Vor%

Wie der obige C-Code nach Rust konvertiert wird? Vor allem die Zeile # 2, die die Nummer rundet.

    
exebook 29.05.2016, 05:53
quelle

3 Antworten

15
  

Besonders die Zeile # 2, die die Nummer rundet.

Erstens: Das ist nicht wahr. Um eine reelle Zahl zu "runden", wird die nächste ganze Zahl zurückgegeben. Sie konvertieren es einfach in int , wodurch alle nicht ganzzahligen Teile verworfen werden.

Aber hier ist das Rust-Äquivalent Ihres genauen Codes (angenommen a hat den Typ f64 ):

%Vor%

Das kann natürlich auch in einer Zeile geschrieben werden:

%Vor%

Wenn Sie runden möchten, anstatt nur den ganzzahligen Teil zu nehmen, können Sie das ​​verwenden round Methode von f64 :

%Vor%

Beachten Sie, dass es auch trunc , ceil und floor . Sie können eine dieser Methoden verwenden, um genau zu steuern, was passiert, anstatt sich auf die Besetzung zu verlassen. Aus dem Rust-Buch können wir lernen:

  

Wenn Sie von einem Gleitkommawert zu einer Ganzzahl umwandeln, wird der Gleitkommawert auf Null gerundet.

Dieses Verhalten entspricht trunc , aber wenn das Verhalten für Sie von Bedeutung ist, sollten Sie trunc verwenden, um ...

  1. ... drücken Sie Ihre Absicht in Code
  2. aus
  3. ... haben eine gültige Semantik, selbst wenn der Rust-Compiler die Cast-Semantik ändert
Lukas Kalbertodt 29.05.2016, 09:59
quelle
3

Um eine Gleitkommazahl auf eine ganze Zahl zu übertragen, können Sie as verwenden. Zum Beispiel:

%Vor%     
deepmax 29.05.2016 06:44
quelle
2

Dies ist ein Beispiel für eine Runde in Rust. Sie müssen numerische Konstanten nach dem Typ schreiben, der sie sind: zum Beispiel, wenn d f64 ist und du es mit 10 multiplizieren willst, ist die richtige Konvention zu schreiben: d * 10,0 Anstatt von: d * 10

und definieren Sie explizit den Typ Ihrer Variablen, um in diesen Fällen die Rundungsfunktion verfügbar zu machen.

%Vor%     
Navid Nabavi 29.05.2016 06:22
quelle

Tags und Links