M4评估精度

时间:2011-03-26 14:13:00

标签: css math floating-point m4

我正在尝试使用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}

有什么想法吗?

谢谢!

2 个答案:

答案 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