Beim Umgang mit Zahlen in JavaScript oder einer anderen Programmiersprache gibt es eine Möglichkeit, eine Zahl nach n
Ziffern abzuschneiden. Leider gibt es in Sass keine solche Funktion. Dennoch treten Rundungs- und Präzisionsprobleme auf, wenn beispielsweise prozentuale Rastersysteme behandelt werden.
Hier ist eine Sass-Implementierung von toFixed()
:
/// toFixed() function in Sass /// @author Hugo Giraudel /// @param (Number) $float - Number to format /// @param (Number) $digits (2) - Number of digits to leave /// @return (Number) @function to-fixed($float, $digits: 2) ( $sass-precision: 5; @if $digits > $sass-precision ( @warn "Sass sets default precision to #($sass-precision) digits, and there is no way to change that for now." + "The returned number will have #($sass-precision) digits, even if you asked for `#($digits)`." + "See https://github.com/sass/sass/issues/1122 for further informations."; ) $pow: pow(10, $digits); @return round($float * $pow) / $pow; )
Beachten Sie, dass Sass eine Standardgenauigkeit von 5 Stellen hat und ab heute nicht mehr konfiguriert werden kann. Aus diesem Grund ist es Sass nicht möglich, eine Zahl mit mehr als 5 Ziffern zu berechnen, unabhängig von der Zahl, die der Funktion als gegeben wurde $digits
.
Außerdem erfordert diese Funktion eine pow
Funktion, die (noch) nicht in Sass enthalten ist. Es ist in Compass vorhanden. Wenn Sie jedoch Compass oder eine andere Bibliothek, die es bereitstellt, nicht verwenden, benötigen Sie möglicherweise Ihre eigene pow
Funktion. Glücklicherweise ist es recht einfach zu implementieren:
/// Power function /// @param (Number) $x /// @param (Number) $n /// @return (Number) @function pow($x, $n) ( $ret: 1; @if $n >= 0 ( @for $i from 1 through $n ( $ret: $ret * $x; ) ) @else ( @for $i from $n to 0 ( $ret: $ret / $x; ) ) @return $ret; )