2011-03-26 70 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