2011-03-26 39 views
2

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

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

任何想法?

谢谢!

+0

它似乎M4中不支持浮点运算。答案中提出的定点解决方案虽然是个好主意。 – AkiRoss 2013-04-17 19:36:25

回答

1

对于您的特定用途的表达可能会成为类似

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

(当然,使用10能够满足您的精度要求的功率) 这是一种常见的伎俩获得浮点样的结果来自一个部门。其他操作符更复杂,并不是说像sin,cos,ln等函数...

通常原则上可以编写一些使用字符串操作和整数运算符实现的浮点操作宏,但我认为当操作不像分区那样简单时,使用由“syscmd()”调用的外部程序(bc,gawk ...)更为实用。

0

从以前的答案启发:

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

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

NB:scale=6;是浮动精密

注:我写这个有点宏,你可以在这里找到:m4 preprocessor BC macro