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 に答える