为什么不';这些浮点值在Sass中是否相等?
我正在计算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
线条高度
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非常感谢你!令人惊叹的!谢谢你的回答和解释。学到了很多:)太棒了!谢谢你的回答和解释。学到了很多:)