Anzeige:
Ergebnis 1 bis 12 von 12

Thema: tex.round () mit LuaTeX: Zahl der Nachkommastellen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    Zitat Zitat von voss Beitrag anzeigen
    Hier optional:
    Code:
    \documentclass{article}
    
    \newcommand*\prozent[3][3]{\directlua{%
      faktor=math.pow(10,#1);
      tex.print(math.floor(faktor*#2/#3*100)/faktor)}}
    
    \begin{document}
    
    \prozent{33}{117}
    
    \prozent[1]{33}{117}
    
    \prozent[7]{33}{117}
    
    \end{document}
    Herbert
    Hallo Herbert,

    vielen Dank für Deine Mühe, das ist schlau ausgedacht, ich beginne so allmählich zu ahnen, wie mächtig die Kombination von LaTeX und Lua ist.

    In den Niederungen der Praxis entfällt dummerweise aber auch hier die letzte Stelle, wenn sie Null ist.

    Ich muss mir also überlegen, wie man abfragt, "wieviele Stellen hat das Ergebnis" und wenn die Antwort ist "kleiner der Summe aus Anzahl der Vorkommastellen plus Anzahl der gewünschten Nachkommastellen", dann müssen an das Ergebnis solange Nullen angefügt werden, bis es stimmt. Seufz.

    Gar nicht so einfach.

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Du willst das Ergebnis formatieren, dafür gibt es string.format. Hauptproblem ist, dass das Formatierungsargument Prozentzeichen benutzt, du musst daher entweder den Code in eine externe lua-Datei auslagern, oder luaexec aus dem luacode-Paket benutzen, damit \% funktioniert:

    Code:
    \documentclass{article}
    \usepackage{luacode}
    \newcommand*\prozent[3][3]{\luaexec{%
      faktor=math.pow(10,#1);
      tex.print(string.format("\%.2f",math.floor(faktor*#2/#3*100)/faktor))}}
    
    \begin{document}
    
    
    \prozent{33}{117}
    
    \prozent[1]{33}{117}
    
    \prozent[7]{33}{117}
    
    \end{document}

  3. #3
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    Code:
    \documentclass{article}
    \usepackage{luacode}
    \newcommand*\prozent[3][3]{\luaexec{%
      faktor=math.pow(10,#1);
      tex.print(string.format("\%.#1f",math.floor(faktor*#2/#3*100)/faktor))}}
    
    \begin{document}
    
    
    \prozent{33}{117}
    
    \prozent[1]{33}{117}
    
    \prozent[7]{33}{117}
    
    \end{document}
    Eine Änderung habe ich eingefügt mit roter Markierung. Ich bin baff, was alles geht, aber die Doku des Befehls, die ich gefunden habe, lässt das nicht einmal erahnen.

    Herzlichen Dank nochmal an Ulrike und Herbert,

    Gruß,
    Alexander

    P.S: Ach ja, wenn jemand mit mathematischem Karma das hier liest und so leise bei sich denkt, dass der obige Code in irgendwelchen Fällen zu einem falschen Ergebnis führt, dann soll er oder sie das hier anmerken.


    EDIT:

    string.format rundet nicht, sonder lässt einfach die nicht gewünschten Ziffern weg. Ups. Ich muss das wohl mal ausführlicher testen.
    Geändert von cookie170 (16-12-2010 um 18:09 Uhr)

  4. #4
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von cookie170 Beitrag anzeigen
    string.format rundet nicht, sonder lässt einfach die nicht gewünschten Ziffern weg. Ups. Ich muss das wohl mal ausführlicher testen.
    es gibt unter Lua nur ceil und floor mit den gleichen Eigenschaften wie unter
    PostScript. Round und trunc müsste man sich selbst schreiben, was allerdings
    kein Problem ist.

    Herbert

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.06.2005
    Ort
    Karlsruhe
    Beiträge
    1.407
    Es scheint so zu funktionieren:

    Code:
    \documentclass{article}
    
    
    \usepackage{luacode}
    \newcommand*\prozent[3][3]{\luaexec{%
      faktor=math.pow(10,#1);
      tex.print(string.format("\%.#1f",math.floor(faktor*#2/#3*100+0.5)/faktor))}}
    
    
    \begin{document}
    
    \prozent[6]{1.855055}{5}
    
    \prozent[2]{33}{117}
    
    \prozent[0]{33}{117}
    
    \prozent[1]{33}{117}
    
    \prozent[5]{33}{117}
    
    
    \end{document}
    Ich werd's in einem ruhigen Moment überdenken.

    A.

  6. #6
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von u_fischer Beitrag anzeigen
    Du willst das Ergebnis formatieren, dafür gibt es string.format. Hauptproblem ist, dass das Formatierungsargument Prozentzeichen benutzt, du musst daher entweder den Code in eine externe lua-Datei auslagern, oder luaexec aus dem luacode-Paket benutzen, damit \% funktioniert:
    man kann es auch maskieren:

    Code:
    \makeatletter
    \newcommand*\prozent[3][3]{\directlua{%
      faktor=math.pow(10,#1);
      tex.print(string.format("\@percentchar.2f",math.floor(faktor*#2/#3*100)/faktor))}}
    \makeatother
    Herbert

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •