Metapost label - Truncating digits after decimal point
![](https://secure.gravatar.com/avatar/50e7e6ec58e101311283a40e60c33572.jpg?s=120&d=mm&r=g)
Hi, Is it possible to truncate the digits after decimal point in Metapost when using textext()? Please see the minimal example below which produces 1.84375. Can I just keep the first digit and have it produce 1.8 ? Thanks. \setuppapersize[letter][letter] \setupcolors[state=start] \starttext \startuseMPgraphic{Figure} u := 1cm; pickup pencircle scaled 2pt; % default pen thickness %TheFunction vardef f(expr x) = (10/x)-x*((0.5)**x) enddef; %Labels label.lft(textext(decimal f(5)),(0,f(5)) scaled u); \stopuseMPgraphic \useMPgraphic{Figure} \stoptext
![](https://secure.gravatar.com/avatar/565476157eb3895a9c928ffce26d988d.jpg?s=120&d=mm&r=g)
Curiouslearn wrote:
Hi,
Is it possible to truncate the digits after decimal point in Metapost when using textext()? Please see the minimal example below which produces 1.84375. Can I just keep the first digit and have it produce 1.8 ?
Here is a helper macro for you: def trunc_digits(expr n, origs) = hide( string s, tmp; numeric ii, e; e := -1; for i=1 upto length(origs): ii := i; tmp := substring (i-1,i) of origs; if tmp = ".": if n=0: ii:=ii-1; exitif true; fi e:=0; fi if e>=0: e := e+1; exitif e>n; fi endfor; s:=substring(0,ii) of origs; ) s enddef; When run this macro with the result of decimal() as second argument, it will create a new string as many fractional digits as you specify in the first argument: label.lft(textext(trunc_digits(1,decimal f(5))),(0,f(5)) scaled u); Best wishes, Taco
![](https://secure.gravatar.com/avatar/50e7e6ec58e101311283a40e60c33572.jpg?s=120&d=mm&r=g)
Thanks so much, Taco. I will try out the code below. Good to know that
Metapost has functions such as substring.
On Sun, Nov 29, 2009 at 3:32 AM, Taco Hoekwater
Curiouslearn wrote:
Hi,
Is it possible to truncate the digits after decimal point in Metapost when using textext()? Please see the minimal example below which produces 1.84375. Can I just keep the first digit and have it produce 1.8 ?
Here is a helper macro for you:
def trunc_digits(expr n, origs) = hide( string s, tmp; numeric ii, e; e := -1; for i=1 upto length(origs): ii := i; tmp := substring (i-1,i) of origs; if tmp = ".": if n=0: ii:=ii-1; exitif true; fi e:=0; fi if e>=0: e := e+1; exitif e>n; fi endfor; s:=substring(0,ii) of origs; ) s enddef;
When run this macro with the result of decimal() as second argument, it will create a new string as many fractional digits as you specify in the first argument:
label.lft(textext(trunc_digits(1,decimal f(5))),(0,f(5)) scaled u);
Best wishes, Taco ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
![](https://secure.gravatar.com/avatar/c5ae4f9aa0d3a9bd5376e92b322c3e50.jpg?s=120&d=mm&r=g)
On Sat, 28 Nov 2009, Curiouslearn wrote:
Hi,
Is it possible to truncate the digits after decimal point in Metapost when using textext()? Please see the minimal example below which produces 1.84375. Can I just keep the first digit and have it produce 1.8 ?
Thanks.
If you are using mkiv, you can use lua to truncate a number. \unexpanded\def\truncate#1{\ctxlua{context("\%.1f", #1)}} \startMPdefinitions def truncatedtext(expr s) = textext("\truncate{" & s & "}") enddef ; \stopMPdefinitions \starttext \startuseMPgraphic{Figure} u := 1cm; pickup pencircle scaled 2pt; % default pen thickness %TheFunction vardef f(expr x) = (10/x)-x*((0.5)**x) enddef; %Labels %label.lft(textext("\truncate{" & decimal f(5) & "}"),(0,f(5)) scaled u); label.lft(truncatedtext(decimal f(5)),(0,f(5)) scaled u); \stopuseMPgraphic \useMPgraphic{Figure} \stoptext Aditya
![](https://secure.gravatar.com/avatar/50e7e6ec58e101311283a40e60c33572.jpg?s=120&d=mm&r=g)
Thanks for this solution. Sounds small and clean. I need to learn Lua I guess.
On Tue, Dec 15, 2009 at 5:34 AM, Aditya Mahajan
On Sat, 28 Nov 2009, Curiouslearn wrote:
Hi,
Is it possible to truncate the digits after decimal point in Metapost when using textext()? Please see the minimal example below which produces 1.84375. Can I just keep the first digit and have it produce 1.8 ?
Thanks.
If you are using mkiv, you can use lua to truncate a number.
\unexpanded\def\truncate#1{\ctxlua{context("\%.1f", #1)}}
\startMPdefinitions def truncatedtext(expr s) = textext("\truncate{" & s & "}") enddef ; \stopMPdefinitions
\starttext \startuseMPgraphic{Figure} u := 1cm; pickup pencircle scaled 2pt; % default pen thickness %TheFunction vardef f(expr x) = (10/x)-x*((0.5)**x) enddef; %Labels %label.lft(textext("\truncate{" & decimal f(5) & "}"),(0,f(5)) scaled u); label.lft(truncatedtext(decimal f(5)),(0,f(5)) scaled u); \stopuseMPgraphic \useMPgraphic{Figure}
\stoptext
Aditya ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
participants (3)
-
Aditya Mahajan
-
Curiouslearn
-
Taco Hoekwater