Kako zaokružiti iznos na 5 pfeninga u C#


Kao što je mnogima poznato u Bosni i Hercegovini ne postoji novčanica od 1 pfening, ali kada odete u granap često puta će te dobiti račun koji vam prodavačica ne može naplatiti jer ne postoje novčanice od 1 odnosno 2 pfeninga. Više informacija oko BH novčanica možete pogledati ovdje. Neki ovu pojavu iskorištavaju, a neki se pokušavaju prilagoditi na način da se na računu ne pojavljuju iznosi koji sadrže 1,2,3,4,6,7,8,9 pfeniga kao posljednju cifru računa.

U tu svrhu potrebno je standardno zaokruživanje koje postoji u C# poput Floor, Ceiling, Turncate obogatiti ovim bosanskim fenomenom te zaokruživati na najbliži broj 0 ili 5. U tu svrhu u narednom tekstu se nalazi implementacije metode koja ovu funkcionalnost implementira.

Potrebno je prvo iznos podjeliti sa 10 da se dobije vrijednost iza zareza u pfeninzima, a onda pogodnim ispitivanjima zaokružiti na bliži broj. Pogledajte implementaciju.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ZaokruzivanjeNaPolaPfeninga
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                             17.61, ZaokruziNa5Feninga(17.61m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.62, ZaokruziNa5Feninga(17.62m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.63, ZaokruziNa5Feninga(17.63m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.64, ZaokruziNa5Feninga(17.64m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.65, ZaokruziNa5Feninga(17.65m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.66, ZaokruziNa5Feninga(17.66m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.67, ZaokruziNa5Feninga(17.67m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.68, ZaokruziNa5Feninga(17.68m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.69, ZaokruziNa5Feninga(17.69m).ToString("N2"));
            Console.WriteLine(
                            "Iznos od  {0} KM se zaokruživa na {1}", 
                            17.70, ZaokruziNa5Feninga(17.70m).ToString("N2"));
            ///
            Console.WriteLine("Press any key to continue...");
            Console.Read();
        }

        private static decimal ZaokruziNa5Feninga(decimal iznos)
        {
            iznos *= 10;

            decimal cijelo = Math.Truncate(iznos);
            decimal ostatak = iznos - cijelo;

            if (ostatak < 0.29999999m)
                 ostatak = 0;
            else if (ostatak < 0.8m)
                 ostatak = 0.5m;
            else
               ostatak = 1m;

            return (cijelo + ostatak)/10.0m;
        }
    }
}
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s