2022

Oct

18

Av Rolf

Det händer allt oftare att jag vill sätta ihop en text med tal, snyggt utformad med decimaler och tusentalsavskiljare. Det kan vara allt från tabelluppställningar till sms-notiser som t.ex. "Bensin 95 kostar idag 21,30 (-0,16 från igår)". FileMaker kan sätta ihop texter, men ska det finnas tal med i texten så blir det sådär. Exemplet utan utformning blir då "Bensin 95 kostar idag 21,3 (-,16 från igår)". Det behövs funktioner för snygga till utseendet så att det passar i löpande text. Jag gjorde en egen funktion för flera år sedan som jag dammar av några gånger i veckan.

Beräkningen för den egna funktionen ser ut så här:

mvUtformaTal (tal; antal_decimaler) =
Let([
  minus = If (tal < 0;"-";"");
  tal = Abs (Round (tal; antal_decimaler));
  heltal = Int (tal);
  decimaler = 10^(antal_decimaler+1) + (tal - heltal)*10^antal_decimaler
];
  minus & heltal & 
  If (antal_decimaler > 0;"," & Right (decimaler; antal_decimaler);"")
)

Först undersöker jag om parametern tal är negativ, då ska resultatet inledas med ett minustecken.

I nästa steg ser jag till att avrunda talet till det antal decimaler som anges som parameter samtidigt som tal görs om till ett positivt tal. Det görs med funktionerna Round (för avrundning) och Abs (för att tal ska vara positivt i följande beräkningar i formeln).

Det tredje steget är att beräkna heltalsdelen av parametern tal, dvs. ta bort alla decimaler. För t.ex. talet 12,05 är heltalet lika med 12. Det finns en funktion för det som heter Int.

Det fjärde steget för att beräkna decimalerna är väl det mest komplicerade. Ett exempel kan vara talet 12,05 som ska visa 2 decimaler. Beräkningen som jag gör blir då 100 + 0,05*100 som blir lika med 105, där de 2 sista tecknen är de decimaler jag vill ha (05). För att få fram 100 använder jag funktionen upphöjt till (^), 10^2 blir 100. Talet 2 i beräkningen är antalet decimaler som jag önskar. Med funktionen Right får jag de 2 tecknen längst till höger.

Till sist sätter jag ihop det eventuella minus-tecknet med heltalet, följt av komma-tecken och decimaler. Komma-tecken och decimaler ska endast finnas med om antal decimaler är större än 0.

Tusentalsavskiljare då? Det finns faktiskt en funktion i FileMaker för det! Funktionen NumToJText sätter in ett tecken vid varje tusental i en av dess kombinationer. På sista raden i funktionen ersätter du då heltal med följande funktion:

Substitute ( NumToJText (heltal; 1; 0);",";" ")

Med parametrarna 1 och 0 sätter funktionen in ett komma-tecken vid varje tusental. I Sverige skrivs tusentalsavskiljare som mellanslag så jag använder funktionen Substitute för att ersätta komma-tecknen med mellanslag.

Skriv en kommentar

Din epost-adress stannar hos oss.