Lorsqu'il s'agit de nombres en JavaScript ou dans tout autre langage de programmation, il existe un moyen de tronquer un nombre après les n
chiffres. Malheureusement, une telle fonction n'existe pas dans Sass. Pourtant, des problèmes d'arrondi et de précision se produisent lorsqu'il s'agit de systèmes de grille basés sur des pourcentages, par exemple.
Voici une implémentation Sass de 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; )
Notez que Sass a une précision par défaut de 5 chiffres et qu'il n'y a aucun moyen de le configurer à partir d'aujourd'hui. Pour cette raison, il n'est pas possible pour Sass de calculer un nombre de plus de 5 chiffres, quel que soit le nombre donné à la fonction comme $digits
.
De plus, cette fonction nécessite une pow
fonction qui n'est pas (encore) native avec Sass. Il existe dans Compass, mais si vous n'utilisez pas Compass ou toute autre bibliothèque qui le fournit, vous pourriez avoir besoin de votre propre pow
fonction. Heureusement, il est assez facile à mettre en œuvre:
/// 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; )