2024

Dec

18

Av Rolf

Excel har några olika funktioner för avrundning till närmaste heltal, multipel, uppåt, nedåt, etc., både för tal och tid. I FileMaker finns också inbyggda funktioner för avrundning, ofta behöver de sättas ihop för att få motsvarande Excel-funktion.

Jag översätter här några Excel-funktioner för avrundningar till "FileMaker-språk".

AVRUNDA (tal; decimaler)

I FileMaker finns den inbyggda funktionen Round som fungerar på samma sätt.

MAVRUNDA (tal; multipel)

Avrundar ett tal till närmsta multipel. T.ex. MAVRUNDA (10;6) ger resultatet 12 som är det närmaste tal till 10 som går att dela jämnt med 6. MAVRUNDA (tal; 0,1) avrundar talet till 1 decimal, MAVRUNDA (tal; 100) avrundar till närmaste hundratal. Jag har tidigare skrivit om hur du gör en funktion som motsvarar MAVRUNDA i FileMaker. Jag kallar samma funktion här för AvrundaTill (tal; till) och formeln är som tidigare:

Int((tal+(till/2))/till)*till

RUNDA.UPP (tal; multipel)

En variant av MAVRUNDA med skillnaden att avrundningen alltid görs uppåt. Det finns en inbyggd funktion kallad Ceiling i FileMaker som gör det mesta jobbet, men för att få samma formel som i Excel behövs en beräkning.

Ceiling (tal / multipel) * multipel

Formeln dividerar talet med den multipel du valt som avrundar uppåt. Till sist multipliceras med multipeln. T.ex. om tal är 10 och multipel är 6 blir divisionen ca 1,67 som avrundas uppåt till närmaste heltal som blir 2. Resultatet är då 2 * multipeln, dvs 12.

RUNDA.NER (tal; multipel)

I princip samma formel som RUNDA.UPP. Enda skillnaden är att avrundning görs nedåt istället för uppåt. I FIleMaker finns inbyggda funktionen Floor som ersätter Ceiling i formeln ovan.

Floor (tal / multipel) * multipel

EVEN (tal)

Avrundar till ett jämnt heltal. Det är egentligen samma som AvrundaTill (tal;2).

Avrunda tid

Är det bara numeriska värden som kan avrundas? Det går faktiskt lika bra med tid och tidsstämpel. Både tid och tidstämpel är egentligen numeriska värden. T.ex formeln:

GetAsNumber (GetAsTime ("00:15:00"))

ger resultatet 900, dvs. 15 minuter är det samma som 900 sekunder. Det viktiga är att berätta för FileMaker att den text du skriver är en tid (det gör du med GetAsTime) samt att du vill konvertera tiden till ett tal, vilket du gör med GetAsNumber.

Vill du avrunda en tid till närmaste 15 minuter använder du formeln:

GetAsTime (
AvrundaTill ( Get ( AktuellTid ) ; GetAsNumber(GetAsTime("00:15:00")) )
) 

Om aktuell tid är "14:09:12" blir resultatet "14:15:00". Funktionen GetAsTime konverterar i det här fallet resultatet till en tidsangivelse.

Istället för tid kan du använda tidstämpel. Formeln blir då:

GetAsTimestamp (
AvrundaTill ( Get ( AktuellTidsstämpel ) ; GetAsNumber(GetAsTime("00:15:00")) )
) 

Om aktuell tidstämpel är "2024-12-18 14:17:28" blir resultatet "2024-12-18 14:15:00".

Det går också utmärkt att använda RUNDA.UPP/RUNDA.NER ovan, t.ex. runda upp till närmaste hel timme:

GetAsTimestamp (
Ceiling ( Get ( AktuellTidsstämpel ) / GetAsNumber(GetAsTime("01:00:00"))) *
GetAsNumber(GetAsTime("01:00:00"))
)

"2024-12-18 14:17:28" ger då resultatet "2024-12-18 15:00:00".

Använder du funktionerna ofta gör du dem med fördel som egna funktioner i din databas.

Skriv en kommentar

Din epost-adress stannar hos oss.
Webbsajten använder FileMaker som CMS.