我正在尝试使用M4宏来生成css文件。我愿意在px中输入我的值并使用eval()进行简单的数学计算以获得结果。不幸的是,我没有找到如何获得花车。
define(`FONTSIZE', `13')dnl
define(`LINEHEIGHT', `17')dnl
.content {padding : eval(LINEHEIGHT / FONTSIZE)em}
>>> m4 style.css.m4
>>> .content {padding : 1em}
有什么想法吗?
谢谢!
答案 0 :(得分:1)
出于特定目的,表达式可能会变成
eval(LINEHEIGHT/FONTSIZE).substr(eval(((LINEHEIGHT%FONTSIZE)*1000)/FONTSIZE + 1000),1)
(当然,使用满足您精度要求的10的力量) 这是从分区获得浮点数结果的常见技巧。其他运算符更复杂,更不用说sin,cos,ln等函数了。
一般来说,原则上可以编写一些用字符串操作和整数运算符实现的浮点操作宏,但我认为使用“syscmd”调用的外部程序(bc,gawk ...)更实用。 )“当操作不像分裂那么简单时。
答案 1 :(得分: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