为什么不';这些浮点值在Sass中是否相等?

为什么不';这些浮点值在Sass中是否相等?,sass,Sass,我正在计算Sass混音器中不同的线条高度s,以确保不同元素遵循垂直节奏。我的$vertical hyperm base当前是8px 一些浏览器(至少是Chrome浏览器)似乎设定了1.33333的值,并使用23px而不是我心目中想要的24px。所以我尝试在mixin中更正该值: $vertical-rhythm-base: 8px =calculateLineHeight($itemFontSize) $lineHeightBase: $vertical-rhythm-base * 3

我正在计算Sass混音器中不同的
线条高度
s,以确保不同元素遵循垂直节奏。我的
$vertical hyperm base
当前是
8px

一些浏览器(至少是Chrome浏览器)似乎设定了
1.33333
的值,并使用
23px
而不是我心目中想要的
24px
。所以我尝试在mixin中更正该值:

$vertical-rhythm-base: 8px

=calculateLineHeight($itemFontSize)
  $lineHeightBase: $vertical-rhythm-base * 3
  $itemLineHeight: (ceil($itemFontSize/$lineHeightBase)*$lineHeightBase)/$itemFontSize
  // fix miscalculation for this value since browsers resort to 23px
  // instead of 24px in the current setup.
  @if $itemLineHeight == 1.33333
    $itemLineHeight: 1.3334

  line-height: $itemLineHeight

.someElement
  +calculateLinHeight(18px)
  font-size: 18px
这似乎不起作用,因为应该获得
行高:1.33334
的项目仍然获得
行高:1.33333


我不明白这里出了什么问题。将
@if
更改为使用
=
而不是
=
会导致将
行高:1.33334
分配给所有内容,而不是正确计算。

133333是重复的。请尝试使用“==(4/3)”

133333。请尝试“==(4/3)”

Sass在比较完成并且生成输出之前不会执行舍入。您的变量仍然包含重复的小数点,即使看起来不是这样。如果要检查是否相等,则必须将重复值与重复值进行比较:

$foo: 4 / 3;

@debug $foo == 1.33333; // false
@debug $foo == 4 / 3;   // true

请注意,如果Sass在比较时而不是之后执行舍入,则if语句仅在使用默认精度设置5时计算为true(有许多Sass库需要更高的精度设置,我以10的精度运行了上述代码)。还要注意的是,Sass的默认精度以前已经更改过一次,将来可能会再次更改。

Sass在完成比较并生成输出之前不会执行舍入。您的变量仍然包含重复的小数点,即使看起来不是这样。如果要检查是否相等,则必须将重复值与重复值进行比较:

$foo: 4 / 3;

@debug $foo == 1.33333; // false
@debug $foo == 4 / 3;   // true

请注意,如果Sass在比较时而不是之后执行舍入,则if语句仅在使用默认精度设置5时计算为true(有许多Sass库需要更高的精度设置,我以10的精度运行了上述代码)。还要注意的是,Sass的默认精度以前已经更改过一次,将来可能会再次更改。

此处没有足够的信息重现此问题。您有未斜体化的变量,并且您没有显示如何调用mixin来获得该值。哦,很抱歉。我添加了更多的上下文(虽然问题已经得到了回答,但最好将此记录在案:)。这里没有足够的信息来重现这个问题。您有未斜体化的变量,并且您没有显示如何调用mixin来获得该值。哦,很抱歉。我添加了更多的上下文(虽然问题已经得到了回答,但最好将此记录在案:)。哇,这太简单了:D非常感谢!哇,那太简单了:D非常感谢你!令人惊叹的!谢谢你的回答和解释。学到了很多:)太棒了!谢谢你的回答和解释。学到了很多:)