Loading...
 

Zahlen


Crystal unterscheidet verschiedene Zahlenformate:

Zahlenformate

Dezimal

87 ist eine dezimale positive Ganzzahl
-19 ist eine negative Ganzzahl
3.14 ist eine positive Fließkommazahl

Hexadezimal

0xFE01 entspricht der Dezimalzahl 65025

Octal

0o63 entspricht der Dezimalzahl 51

Binär

0b10110001 enspreicht der Dezimalzahl 177

Runden mit 'round'

Runden kann Crystal natürlich auch:

krumm = 7.894
noch_krummer = 3.5187

# runden auf 2 Stellen (kaufmännisch)
p! krumm.round(2)

# runden auf eine ganze Zahl
p! krumm. round(0)

# wird aufgerundet
p! noch_krummer.round(0)

# will man abrunden, kann man auch nach Int casten
p! noch_krummer.to_i8


Ausgabe:
krumm.round(2) # => 7.89
krumm.round(0) # => 8.0
noch_krummer.round(0) # => 4.0
noch_krummer.to_i8 # => 3

Menschenlesbar mit 'humanize'

Für die Ausgabe steht eine komportable Funktion bereit, die sehr große oder sehr kleine Zahlen für uns Menschen gut lesbar machen:

zahl_gross = 3_138
zahl_klein = 0.000_298

# Ausgabe mit SI-Einheiten und grundet wird auch noch
p! zahl_gross.humanize(precision: 2)
p! zahl_klein.humanize(precision: 2)

# so gibts mehr Nachkommastellen (ohne Runden)
p! zahl_gross.humanize(precision: 2, significant: false)

# das ist der Standardfall
p! zahl_gross.humanize(precision: 2, significant: true)

# auch kleine Zahlen gehen so genauer
p! zahl_klein.humanize(precision: 2, significant: false)

Ausgabe:
zahl_gross.humanize(precision: 2) # => "3.1k"
zahl_klein.humanize(precision: 2) # => "300µ"
zahl_gross.humanize(precision: 2, significant: false) # => "3.14k"
zahl_gross.humanize(precision: 2, significant: true) # => "3.1k"
zahl_klein.humanize(precision: 2, significant: false) # => "298.00µ"

Minus, Plus oder Null mit 'sign'

Will man schnell mal wissen, ob man es mit einer positiven oder negativen Zahl zu tun hat nimmt man 'sign'.

negativ = -3.9943
positiv = 4.7
nullinger = 0

# -1 bei negativ, 1 bei positiv, 0 bei 0
p! negativ.sign
p! positiv.sign
p! nullinger.sign


Ausgabe:
negativ.sign # => -1
positiv.sign # => 1
nullinger.sign # => 0

Einer, Zehner, Hunderter mit 'significant'

Will man nur eine bestimmte Ziffern aus einer Zahl hilft 'significant':

zahl = 123_456

# nimmt nur die vordersten 2 Stellen
p! zahl.significant(2)

# die 4 ersten Stellen sind wichtig
p! zahl.significant(4)


Ausgabe:
zahl.significant(2) # => 120000
zahl.significant(4) # => 123500