2015-04-27 3 views
2

У меня есть следующий Sass правило:Sass/SCSS - округление вниз знаков после запятой

$multiplier: 1/3*100; 
.ratio_1x0-5{ 
    padding-bottom: 0.5%*$multiplier; 
} 

который выводит следующий CSS:

.ratio_1x0-5{ 
    padding-bottom: 16.6666666667% 
} 

Вместо этого - мне нужно это правило, чтобы быть следующим (десятичная точность не важна - только последнее значение - это 6, а не 7), это решение проблемы подпиксельной рендеринга.

.ratio_1x0-5{ 
    padding-bottom: 16.6666% 
} 

Если я использую функцию Sass «пол» - это округляет все это до '16%». Есть ли способ округлить до x число десятичных знаков в Sass? Как насчет использования mixin для этого? Я использую libsass (sass 3.2).

Настройка «точность» не работает - последнее значение остается «7». Только изменение точности только усекает число десятичных знаков - оно не округляется до последнего десятичного разряда, как мне нужно.

Codepen: http://codepen.io/calumbrodie/pen/aOzVga

Edit: кто отмечен это как дубликат - это другой вопрос, другой вопрос о «точности», в то время как я явно объяснить, почему это не о «точности» , Я не могу сделать это более ясным.

+1

возможно дубликат [Округление в Sass] (HTTP : //stackoverflow.com/questions/10369643/rounding-in-sass) – cimmanon

+0

@cimmanon - Это не дубликат - удалите свой флаг. Ответ на другой вопрос - «точность», и я объяснил в своем первоначальном вопросе, что речь идет не только о точности, но и о выполнении операции «пол» на десятичной запятой. – calumbrodie

+0

Я не обязан ничего снимать. Просто потому, что принятый ответ не делает то, что вы хотите, не делает ваш вопрос не дубликатом. Другой ответ * * отвечает на ваш вопрос (и проще). – cimmanon

ответ

-1

use $ sass-precision: x; было бы ясно сказать, что нужно округлить до десятичных знаков.

+0

Разве это не просто корректирует количество знаков после запятой? – calumbrodie

1

Найден ответ только после размещения благодаря следующим Gist:

https://gist.github.com/terkel/4373420

@function decimal-round ($number, $digits: 0, $mode: round) { 
    $n: 1; 
    // $number must be a number 
    @if type-of($number) != number { 
     @warn '#{ $number } is not a number.'; 
     @return $number; 
    } 
    // $digits must be a unitless number 
    @if type-of($digits) != number { 
     @warn '#{ $digits } is not a number.'; 
     @return $number; 
    } @else if not unitless($digits) { 
     @warn '#{ $digits } has a unit.'; 
     @return $number; 
    } 
    @for $i from 1 through $digits { 
     $n: $n * 10; 
    } 
    @if $mode == round { 
     @return round($number * $n)/$n; 
    } @else if $mode == ceil { 
     @return ceil($number * $n)/$n; 
    } @else if $mode == floor { 
     @return floor($number * $n)/$n; 
    } @else { 
     @warn '#{ $mode } is undefined keyword.'; 
     @return $number; 
    } 
} 

Затем использовать его следующим образом:

.ratio_1x0-5{ 
    padding-bottom: decimal-round(0.5%*$multiplier, 5, floor); 
}