Autor Téma: Zaokruhlovanie Double hodnoty  (Přečteno 487 krát)

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Zaokruhlovanie Double hodnoty
« kdy: 15-01-2025, 22:19:23 »
Zdravim pani

Ja viem ze float cisla su v programovani vzdy problem a vacsinu zivota sa im vyhybam ked sa to da. Ale teraz mam problem. Nezaokruhli to jak ma, co s tym? Ani
Kód: Delphi [Vybrat]
  1. Format('%.2f'...
nevrati spravny vysledok. Vid. obrazok...

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:Zaokruhlovanie Double hodnoty
« Odpověď #1 kdy: 15-01-2025, 22:28:20 »
skusobny konzolovy projekt robi to iste 🤷

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3554
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Zaokruhlovanie Double hodnoty
« Odpověď #2 kdy: 15-01-2025, 22:54:03 »
Excellent
Rated 1 time
Ale z helpu:
RoundTo uses "Banker's Rounding" to determine how to round values that are exactly midway between the two values with the desired number of significant digits. This method rounds to an even number if AValue is not nearer to either value.
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3554
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Zaokruhlovanie Double hodnoty
« Odpověď #3 kdy: 15-01-2025, 22:55:18 »
To co potrebujes je asi SimpleRoundTo ne?
Embarcadero MVP - Czech republic

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:Zaokruhlovanie Double hodnoty
« Odpověď #4 kdy: 16-01-2025, 11:45:10 »
Vdaka, skusil som, ale nepomohlo 😔

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3554
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Zaokruhlovanie Double hodnoty
« Odpověď #5 kdy: 16-01-2025, 11:53:45 »
Excellent
Rated 1 time
Kód: Delphi [Vybrat]
  1. uses
  2.   System.SysUtils, Math;
  3. var
  4.   dph: Double;
  5.   cr: Currency;
  6.   crRounded, crRounded2: Currency;
  7. begin
  8.   try
  9.  
  10.     dph := 224.825;
  11.     cr := dph;
  12.     crRounded := SimpleRoundTo(cr);
  13.     crRounded2 := SimpleRoundTo(dph);
  14.     writeln(dph);
  15.     writeln(cr);
  16.     writeln(crRounded);
  17.     writeln(crRounded2);
  18.  
  19.     readln;
  20.   except
  21.     on E: Exception do
  22.       Writeln(E.ClassName, ': ', E.Message);
  23.   end;
  24. end.
Embarcadero MVP - Czech republic

Offline chaloup

  • Plnoletý
  • ***
  • Příspěvků: 139
  • Karma: 11
    • Verze Delphi: Delphi 12.2
Re:Zaokruhlovanie Double hodnoty
« Odpověď #6 kdy: 16-01-2025, 15:55:43 »
Jestli chceš aby ti Delphi zaokrouhlovalo po "našem", tak nastav:
Kód: Delphi [Vybrat]
  1. SetRoundMode(rmUp);

je to v System.Math

https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Math.SetRoundMode

Offline Daniel_Andrascik

  • Guru
  • *****
  • Příspěvků: 590
  • Karma: 20
    • Verze Delphi: D2007, D10.4
Re:Zaokruhlovanie Double hodnoty
« Odpověď #7 kdy: 16-01-2025, 20:40:07 »
Diky Radku. Na fintu s Currency som asi este nikde nenarazil, alebo uz zabudol. Ale fakt by ma nenapadlo ze s inym datovym typom to bude fungovat inak. Ako hovorim s pohyblivou desatinou ciarkou som v zivote len velmi malo pracoval 🤷. Viem ze currency je speci datovy format pre pracu s menami, ale ze mi inak zaokruhli double a inak zaokruhli currency pri dvoch desatinnych miestach by som fakt necakal.

To chaloup. Vyskusam aj to  ;)