Wenn man mit Zahlen in JavaScript oder jeder anderen Programmiersprache arbeitet, gibt es eine Möglichkeit, eine Zahl nach n Ziffern abzuschneiden. Leider gibt es keine solche Funktion in Sass. Dennoch treten Rundungs- und Präzisionsprobleme auf, wenn man beispielsweise mit prozentualen Grid-Systemen arbeitet.
Hier ist eine Sass-Implementierung von toFixed()
/// toFixed() function in Sass
/// @author Kitty 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 Standardpräzision von 5 Ziffern hat und es derzeit keine Möglichkeit gibt, diese zu konfigurieren. Aus diesem Grund ist es für Sass nicht möglich, eine Zahl mit mehr als 5 Ziffern zu berechnen, unabhängig von der Zahl, die der Funktion als $digits übergeben wird.
Außerdem benötigt diese Funktion eine pow-Funktion, die nicht nativ in Sass enthalten ist (noch nicht). Sie existiert in Compass, aber wenn Sie Compass oder eine andere Bibliothek, die sie bereitstellt, nicht verwenden, benötigen Sie möglicherweise Ihre eigene pow-Funktion. Glücklicherweise ist diese 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;
}