CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - FormatFloat a liczba całkowita

FormatFloat a liczba całkowita

dział ogólny

FormatFloat a liczba całkowita

Nowy postprzez Corvis » środa, 7 listopada 2012, 22:33

Witam,

Używam funkcji FormatFloat("0.00000", Wartosc); o ile liczby są z przecinkiem to wygląda to wszystko fajnie. Ale jak z obliczeń wychodzi mi liczba całkowita to wygląda to słabo:

Format.png


Moje pytanie jest takie. Czy jest jakaś mądrzejsza funkcja która dla liczby całkowitej nie zrobi czegoś takiego: 5443.00000 czy muszę sam napisać taką która sprawdzi czy liczba jest całkowita i ustawi odpowiedni format aby otrzymać: 5443. Problem jest taki, że dane mogą być raz całkowite, raz zmiennoprzecinkowe a raz mieszane.

Pozdrawiam,
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: FormatFloat a liczba całkowita

Nowy postprzez Cyfrowy Baron » czwartek, 8 listopada 2012, 06:20

Możesz użyć funkcji FloatToStrF z parametrem ffGeneral, ale wtedy liczba zmiennopozycyjna będzie konwertowana do najkrótszej możliwej wartości po przecinku np. wartość 5394.49023 zostanie przekonwertowana na 5394.49 a wartość 5394.49823 na 5394.498. Zera po przecinku będą jednak obcinane.

Teraz nie mam czasu, ale po południu pomyślę na własną funkcją wykorzystującą funkcję modf.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: FormatFloat a liczba całkowita

Nowy postprzez polymorphism » czwartek, 8 listopada 2012, 10:41

A tak -> "0.#####" :?:
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
Corvis
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: FormatFloat a liczba całkowita

Nowy postprzez Corvis » czwartek, 8 listopada 2012, 11:51

Działa !!! Wielkie dzięki :D
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

Re: FormatFloat a liczba całkowita

Nowy postprzez Cyfrowy Baron » czwartek, 8 listopada 2012, 16:03

Tak! Zupełnie o tym zapomniałem. Gwoli uzupełnienia dla potomnych, chodzi o funkcję FormatFloat i/lub FormatCurr:

KOD cpp:     UKRYJ  
 float x = 5394.49823;
 int y = 5394;
 Edit1->Text = FormatFloat( "0.#####", x);
 Edit2->Text = FormatFloat( "0.#####", y);


A gdyby ktoś chciał wymusić w programie używanie jako separatora dziesiętnego konkretnego znaku to należy skorzystać z klasy TFormatSettings, ale uwaga ta klasa nie jest chyba dostępna w środowisku C++Builder 6 i starszych:

KOD cpp:     UKRYJ  
 float x = 5394.49823;
 int y = 5394;

 TFormatSettings fSettings;
 //GetLocaleFormatSettings(1045, fSettings);
 fSettings.DecimalSeparator =  '.';
 
 Edit1->Text = FormatFloat( "0.#####", x, fSettings );
 Edit2->Text = FormatFloat( "0.#####", y, fSettings );
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości