[ pl4stik @ 18.12.2021. 10:46 ] @
Pozdrav

Jel moze molim vas neko da mi kaze sta moze da bude problem kad mi za ovako nesto vraca vrednost 0?

Code:

using System;
                    
public class Program
{
    public static void Main()
    {
        var calc = (2/(3600 / (3600 / 4))) * 5;
        Console.WriteLine(calc.ToString());//Value returned is 0 and should be 2.5
    }
}


https://dotnetfiddle.net/UIeHa5
[ djoka_l @ 18.12.2021. 10:52 ] @
Napisao si celobrojno deljenje
Code:
using System;
                    
public class Program
{
    public static void Main()
    {
        var calc = (2.0/(3600 / (3600 / 4))) * 5;
        Console.WriteLine(calc.ToString());//Value returned is 0 and should be 2.5
    }
}
[ pl4stik @ 18.12.2021. 11:09 ] @
Kolko je ovo strasno
[ djoka_l @ 18.12.2021. 12:25 ] @
Pa tako je u većini C-like jezika. Ako jezik može da razume da je u operacijama korišćen samo int tip podataka, sve će da radi kao celobrojnu aritmetiku. Ako jezik podržava implicitnu konverziju, staviš jedan float/double parametar pa će sve (možda) da odradi u pokretnom zarezu. Ja sam stavio samo jedan float - 2.0 - jer sve ostale operacije daju isti rezultat i u celobrojnoj i u float aritmetici.
[ pl4stik @ 18.12.2021. 12:58 ] @
Za mene je samo jedno mozda razlika dal cu da prihvatim projekat il ne a ovo
Code:

using System;
                    
public class Program
{
    public static void Main()
    {
        int a = 2;
        float b = 2;
        double c = 2;
        int d = 3600;
        double e = 3600;
        int f = 4;
        double g = 4;    
        int h = 5;    
        
        var calca = (a/(d / (d / f))) * h;
        var calcb = (b/(d / (d / f))) * h;
        var calcc = (c/(e / (e / f))) * h;
        var calcd = (a/(e / (e / f))) * h;
        var calce = (a/(d / (d / g))) * h;        
                
        Console.WriteLine(calca.ToString()); // 0
        Console.WriteLine(calcb.ToString()); // 2.5
        Console.WriteLine(calcc.ToString()); // 2.5
        Console.WriteLine(calcd.ToString()); // 2.5
        Console.WriteLine(calce.ToString()); // 2.5
        
    }
}


znaci da cu posle 20 godina da kompletno izbacim integer iz svih projekata!!! Ne mogu da verujem
[ djoka_l @ 18.12.2021. 13:30 ] @
Ne moraš da izbaciš int iz programiranja, koristi cast. Uostalom, ako je tebi bitno da rezultat bude 2.5 (float), zašto očekuješ da će int aritmetika da ti da float rezultat?
[ pl4stik @ 18.12.2021. 13:49 ] @
Pa OK ne mora da vrati int al nek baci ex ... Ja sam kriv svakako al sam sa int zavrsio big time ako ce da bude umesan u bilo kakve kalkulacije ..samo za ID MOZDA :D
[ Shadowed @ 18.12.2021. 14:25 ] @
U tom slucaju bi u vecini slucajeva deljenja imao exception :)
Ako uzmes sve intove i podelis jedan sa drugim, vise bi putao imao exception nego rezultat.
S druge strane, dobijanje celog dela rezultata deljenja celih brojeva nije toliko cudna stvar. Jedonstavno, deli ti sa onoliko preciznosti koliko moze (kao sto je to slucaj i sa drugim tipovima 1/3 i ce ti i za double i float dati preciznost samo koliko moze, nece tacnu vrednost).

Ono sto je tebe verovatno dovelo u zabludu je da kada napises 2 to je u stvari int iako nigde ne pise a sa gledista matematike isto tako bi se pisao i double. No, programskom jeziku ipak treba precizno sta hoces.
Dalje je sve jasno, imas int-ove u operacijama pa je i rezultat int koji mora biti svedeni na ceo broj, cak i ako matematicki gledano operacija daje rezultat koji nije ceo broj.
[ pl4stik @ 18.12.2021. 14:39 ] @
@Shadowed
Da ocigledno ste u pravu nema sumnje al je po meni to lose resenje za na primer pocetnike kao ja, ma resicu ga nema problema samo dok sam mu vido navike :)