Float Divison und Casting in Swift

8

Ich versuche Swift zu lernen, und ich habe eine einfache durchschnittliche Funktion gemacht:

%Vor%

Das gibt mir das richtige Ergebnis: 3.5 Ich frage mich jedoch, warum ich sowohl sum als auch numbers.count auf Floats setzen muss. Ich habe versucht, auf diese Weise zu werfen:

%Vor%

aber es gibt mir nur 3.0

    
Tomasero 06.08.2014, 00:44
quelle

2 Antworten

17

Zuerst sollten Sie Double und nicht Float verwenden. Float gibt Ihnen sehr begrenzte Präzision. Warum Sie mit Float 6-stellige Genauigkeit wünschen, wenn Sie mit Double 15 Ziffern haben könnten, ist schwer zu verstehen.

Zweitens macht ein Compiler genau das, was Sie ihm sagen.

%Vor%

nimmt die Ganzzahl "sum", nimmt die ganze Zahl "numbers.count", konvertiert beides in Float und dividiert. Divison of Float ergibt in diesem Fall ein Ergebnis von 3,5.

%Vor%

teilt die Ganzzahl "sum" durch die Ganzzahl "numbers.count". Die Division von ganzen Zahlen ergibt ein Integer -Ergebnis, welches der Integer-Quotient ohne Berücksichtigung eines Rests ist. 21/6 ist gleich 3 mit einem Rest von 3. Also ist das Ergebnis der Division 3, die du dann in den Float 3.0 umwandelst.

    
gnasher729 06.08.2014, 00:52
quelle
0
%Vor%

In dieser Anweisung sind sum und numbers.count beide Ints. Sie verwenden also eine Int-Division-Funktion, die Int zurückgibt. Da ein Ints nur ganze Werte hat, verliert dieses Ergebnis jegliche Dezimalgenauigkeit. Ein Float wird dann von diesem Int erzeugt und es hat Dezimalziffern, aber die Genauigkeit ist bereits an diesem Punkt verloren gegangen.

%Vor%

In dieser Anweisung werden Floats aus sum und numbers.count gebildet und dann geteilt. Da sie dieses Mal Floats sind, wird eine Divisionsfunktion für Floats verwendet, die einen Float zurückgibt. In dieser Aussage geht die Genauigkeit niemals verloren, daher liefert sie ein genaueres Ergebnis.

    
connor 06.08.2014 00:51
quelle

Tags und Links