Khi xử lý các số trong JavaScript hoặc bất kỳ ngôn ngữ lập trình nào khác, có một cách để cắt bớt một số sau các n
chữ số. Thật không may, không có chức năng này trong Sass. Tuy nhiên, các vấn đề về làm tròn và độ chính xác vẫn xảy ra khi xử lý các hệ thống lưới dựa trên tỷ lệ phần trăm.
Đây là một triển khai Sass của 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; )
Lưu ý rằng Sass có độ chính xác mặc định là 5 chữ số và không có cách nào để định cấu hình nó kể từ ngày hôm nay. Do đó, Sass không thể tính một số có nhiều hơn 5 chữ số, bất kể số được cung cấp cho hàm là $digits
.
Ngoài ra, chức năng này yêu cầu một pow
chức năng không có sẵn với Sass (chưa). Nó tồn tại trong La bàn, nhưng nếu bạn không sử dụng La bàn hoặc bất kỳ thư viện nào khác cung cấp nó, bạn có thể cần pow
chức năng của riêng mình . May mắn thay, nó khá dễ thực hiện:
/// 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; )