Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
localp={} localnames={ "juta","miliar","triliun","kuadriliun", "kuintriliun","sextriliun","septriliun","oktriliun" } -- two_decimals: boolean, whether to forbid a 1 d.p. result, so 2 becomes "2", -- 2.1 "2.10", and 2.123 "2.123" functionp.decimal(val,length,two_decimals) localprecision=math.max(0,math.ceil(length-1-math.log10(val))) iftwo_decimalsandprecision==1thenprecision=2end localresult=("%%.%uf"):format(precision):format(val) iftwo_decimalsthen result=result:gsub('%.0*$',''):gsub('(%.[0-9][0-9][0-9]-)0+$','%1') else result=result:gsub('%.?0*$','') end result=mw.text.split(result,'%.') result[1]=result[1]:reverse():gsub('[0-9][0-9][0-9]','%0,'):reverse():gsub('^,','') returntable.concat(result,'.') end functionp.format(val,precision) localscale=math.floor(math.log10(val)/3)-1 ifscale>0then scale=math.min(scale,#names) val=val/math.pow(10,3*(1+scale)) returnp.decimal(val,3)..'\194\160'..names[scale] end ifprecision<=0then val=math.floor(val/math.pow(10,-precision)+0.5) val=val*math.pow(10,-precision) end returnp.decimal(val,precision+1,true) end p['']=function(frame) localval=tonumber(frame.args[1]) ifnotvalorval<0then error('[[Module:Format price|Format price]] error: cannot parse value "'..(frame.args[1]or'')..'"') end returnp.format(val,tonumber(frame.args[2])or2) end returnp