2011-03-26 3 views
2

CSS 파일을 생성하기 위해 M4 매크로를 사용하려고합니다. 나는 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

답변

1

표현은 (물론, 정밀 요구 사항을 충족 (10)의 전원을 사용)

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

과 같이 될 수 이것은 부동 소수점과 같은 결과를 얻을 수있는 일반적인 트릭 부서에서. 다른 연산자는 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; 정밀도를

NB 부동입니다 : 나는 이것에 대한 약간의 매크로를 작성했습니다, 당신은 여기에서 찾을 수 있습니다 : m4 preprocessor BC macro