Autor Téma: Delphi 6 - FormatFloat nedodržuje formát  (Přečteno 392 krát)

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 278
  • Karma: 0
Delphi 6 - FormatFloat nedodržuje formát
« kdy: 16-06-2021, 15:12:06 »
Vážená komunito,

mám jednoduchý kód:
Kód: Delphi [Vybrat]
  1. lab_diag_val.Caption := FormatFloat('0.#', fDiagVal);
  2.  

fDiagVal je single. Proč to do labelu píše více desetinných míst než jedno? Doposavad mi FormatFloat fungoval, ale najednou se pokazil. Nenapadá někoho, čím by to mohlo být? Kód je v Delphi 6.

Díky.
 

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2879
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #1 kdy: 16-06-2021, 15:55:33 »
Neprepisujes to nekde jinde? Co ti vypise ShowMessage(FormatFloat('0.#', 1.345)) ?
Embarcadero MVP - Czech republic

Offline František

  • Guru
  • *****
  • Příspěvků: 656
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #2 kdy: 17-06-2021, 06:59:11 »
nemáš formát na tom zobrazovadle?

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 278
  • Karma: 0
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #3 kdy: 17-06-2021, 07:02:12 »
Vypíše to 1,3 ... což je správně. Napadá mě jen to, že bity v té single proměnné nejsou "v pořádku". Proměnná je ve struktuře, která se plní nejspíše pomocí Copy (nebo jiné funkci pro kopírování dat). Čekal bych pak nesmyslnou hodnotu v single proměnné, ale že z toho pak blbne i FormatFloat je překvapující. Dnes to prověřím.

Offline age.new

  • Hrdina
  • ****
  • Příspěvků: 278
  • Karma: 0
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #4 kdy: 21-06-2021, 06:51:10 »
Tak FormatFloat dával špatný výstup, protože se proměnná typu single chybně plnila, resp. kopie obsahu paměti do struktury byla posunutá. Je to zajímavé - čekal bych, že pak bude mít single proměnná chybné číslo, ale i tak FormatFloat zobrazí správně dle masky. Asi lze mít v single proměnné i něco "co číslo není". Je to podivné. V každém případě spravení kopírování paměti spravilo i FormatFloat.

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1043
  • Karma: 29
    • Verze Delphi: XE8, Seattle
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #5 kdy: 21-06-2021, 14:15:54 »
Single se běžně používal jako parametr k předání přes Longint. např v některých funkcích DirectX

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3213
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #6 kdy: 21-06-2021, 16:08:57 »
Asi lze mít v single proměnné i něco "co číslo není".
Temer u kazdeho floating-point typu existuji extra hodnoty
   +/- Nekonecno
   NaN

a v rade jazyku je nutne takove hodnoty testovat. V kazdem pripade bez hexa dumpu je to diskuse o nicem.


Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3213
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Delphi 6 - FormatFloat nedodržuje formát
« Odpověď #7 kdy: 21-06-2021, 16:10:14 »
Single se běžně používal jako parametr k předání přes Longint. např v některých funkcích DirectX
No jasne: pokud zachovas pocatecni adresu promenne, jeji velikost a endian, tak je to z pohledu stroje jedno, co si o tom mysli programator.