2

我正在尝试使用 M4 宏来生成 css 文件。我愿意在 px 中输入我的值并使用 eval() 进行简单的数学运算以得到 em 中的结果。不幸的是,我没有找到如何获得花车。

define(`FONTSIZE', `13')dnl
define(`LINEHEIGHT', `17')dnl
.content {padding : eval(LINEHEIGHT / FONTSIZE)em}
>>> m4 style.css.m4
>>> .content {padding : 1em}

有任何想法吗?

谢谢!

4

2 回答 2

1

对于您的特定目的,表达式可能会变成类似

eval(LINEHEIGHT/FONTSIZE).substr(eval(((LINEHEIGHT%FONTSIZE)*1000)/FONTSIZE + 1000),1)

(当然,使用 10 的幂来满足您的精度要求)这是从除法中获得类似浮点结果的常用技巧。其他的算子比较复杂,sin、cos、ln等函数就更不用说了……

一般来说,原则上可以编写一些用字符串操作和整数运算符实现的浮点操作宏,但我认为使用“syscmd()”调用的外部程序(bc,gawk ...)更实用操作并不像除法那么简单。

于 2011-03-26T15:11:30.837 回答
0

灵感来自之前的答案:

define(`FONTSIZE', `13')dnl
define(`LINEHEIGHT', `17')dnl

.content {padding:syscmd(bc <<< "scale=6; print LINEHEIGHT/FONTSIZE")em;}

注意:scale=6;用于浮动精度

注意:我为此写了一个小宏,你可以在这里找到它:m4 preprocessor BC macro

于 2014-06-16T16:31:52.707 回答