[Lua] Formatierungsfunktion für Integerwerte

CHDK-Skripte, CHDK-Entwicklung, PC-Zusatzprogramme, Informationen für Tüftler

Formatierungsfunktion für Integerwerte

Beitragvon rudi » 31.03.2010, 21:38

Hallo Scripter,

mit dieser Funktion lassen sich Integerwerte für die Scriptausgabe formatieren. Es erfolgt keine Rundung.

Int2Str(val, f_dist[, dpow [,unit [,fix] ] ] )
val: zu formatierender Integerwert
f_dist: Entfernungsflag [0,1]; [1] setzt das Ergebnis auf "inf", wenn (val<=0) oder (val>=65535)
dpow: Zehnerpotenz zur Formatierung=10^dpow; z.B. [2] val=*100, [-2] val=*0,01
unit: Einheit oder ""
fix: Anzahl der festen Nachkommastellen

Syntax: [ Download ] [ Verstecken ]
Benutze Lua Syntax Highlighting
function Int2Str(val, f_dist, dpow, unit, fix)
  local sval=tostring(math.abs(val))
  local res=tostring(val)
  if (f_dist==1 and (val<=0 or val>=65535)) then res="inf" end
  if (sval~="nil" and res~="inf" and dpow~=nil) then
    local slen=string.len(sval)
    local scount=math.abs(dpow)
    local least=""
    if (scount==dpow) then
      res=sval..string.rep("0",scount)
      if (fix~=nil) then least=string.rep("0",fix) end
    else
      if (slen<=scount) then
        sval=string.rep("0",scount-slen+1)..sval
        slen=string.len(sval)
      end
      res=string.sub(sval,1,slen-scount)
      least=string.sub(sval,slen-scount+1)
      local l_l=string.len(least)
      if (fix==nil) then
        while (l_l>0 and string.sub(least,l_l)=="0") do
          least=string.sub(least,1,l_l-1)
          l_l=string.len(least)
        end
      else
        if (l_l>math.abs(fix)) then least=string.sub(least,1,fix) end
        if (l_l<math.abs(fix)) then least=least..string.rep("0",fix-l_l) end
      end
    end
    if (string.len(least)>0) then res=res.."."..least end
    if (val<0) then res="-"..res end
  end
  if (unit~=nil and res~="inf" and string.len(unit)>0) then res=res.." "..unit end
  return res
end
Erstellt in 0.007 Sekunden, mit GeSHi 1.0.8.9

Beispiel:
Eine Motiventfernung von 1234 mm soll in Meter mit 2 Nachkommastellen angezeigt werden
Int2Str(1234,1,-3,"m",2) => 1.23 m

[EDIT]
Verarbeitung negativer Werte korrigiert.
[/EDIT]

Gruß rudi.
Zuletzt geändert von rudi am 31.03.2010, 23:21, insgesamt 1-mal geändert.
Benutzeravatar
rudi
CHDK-Spezialist
CHDK-Spezialist
 
Beiträge: 500
Registriert: 11.09.2009, 12:27
Kamera(s): A590IS_101B, SX260_100B

Beitragvon msl » 31.03.2010, 22:09

Hallo rudi,

sehr schön.Bild

Ich durfte ja schon bei den Tests zum neuen DOF-Rechner mit dieser Funktion arbeiten. Damit lassen sich Werte in realistischer Form darstellen und sind somit verständlicher.

Gruß msl
■ "Hey you, don't tell me there's no hope at all. Together we stand, divided we fall."CHDK inside FAQCHDK-Neuigkeiten auf Twitter
Benutzeravatar
msl
Super-Mod
Super-Mod
 
Beiträge: 4512
Bilder: 271
Registriert: 22.02.2008, 12:47
Wohnort: Leipzig
Kamera(s): A720 1.00c
SX220 1.01a


Zurück zu Code-Ecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast