konwersja na float

konwersja na float
wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 678
0

jak przekonwertować takie wyrażenie np: 2.93e-005 na wartość flloat czytelną podczas podania pod cout ? bo to jest efekt podzielnej mniejszej przez większą to powinno podać wartość poniżej jeden a większą od zera.

Kopiuj

HighTimer::HighTimer()
{
	QueryPerformanceFrequency(&m_ticksPerSecond);
}

odpytanie:
float updatetimeDf()
{
	float v;
	QueryPerformanceCounter(&start);
	pos.QuadPart=start.QuadPart-end.QuadPart;
	end.QuadPart=start.QuadPart;
	v=(float)(pos.QuadPart)/(float)m_ticksPerSecond.QuadPart;
	return v;
}

HighTimer ob;

bool done=false;
do
{
cout << ob.updatetimeDf() << endl;
}while(!done);
lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5023
0

Próbowałeś std::fixed i setprecision?

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 678
0

u mnie nie ma std bo mam VC++ 6.0 Pro 😕

K1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 55
0

ChatGPT zaproponował przekonwertowanie liczby na tablicę znaków i wypisanie jej.

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 678
0

ja osobiście napisałem 4 konwertery z str na int , str na float , float na str , int na str , a takie coś 2.93e-005 to diabeł wie jak napisać konwerter bo jest mieszanka liter z cyframi i to w dodatku zaszyfrowane jakoś dziwnie ...

Marius.Maximus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2184
3

u mnie nie ma std bo mam VC++ 6.0 Pro

@wilkwielki: wróć proszę jak ogarniesz kompilator C++17 , używanie staroci musi być racjonalnie uzasadnione np. praca przy aktualizacji oprogramowania do starej stacji kosmicznej z Windows CE

EL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 143
2

W VC++ 6.0 Pro nie ma printf ?
A jesli koniecznie z jakis niepojetych dla mnie powodow musisz uzyc cout to zawsze mozna zaczac od sprintf/snprintf tylko po to zeby rezultat wypisac przez cout.

takie coś 2.93e-005 to diabeł wie jak napisać konwerter

To jeszcze mniej rozumiem niz "na wartość float czytelną". Przeciez updatetimeDf() juz zwraca float. Chcesz konwertowac float na float? Bez wzgledu na to czy jest wyswietlane 2.93e-05 czy 0.0000293 to binarnie to jest dokladnie to samo.

MY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1107
4
wilkwielki napisał(a):

takie coś 2.93e-005 to diabeł wie jak napisać konwerter bo jest mieszanka liter z cyframi i to w dodatku zaszyfrowane jakoś dziwnie ...

To nie jest dziwnie zaszyfrowane. To bardzo powszechny sposób zapisu dużych oraz małych liczb https://pl.wikipedia.org/wiki/Notacja_naukowa

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 678
0

jeśli 2.93e-05 to 0.0000293 to jak tą notacje przekład wywołać podczas zapodania takiej zmiennej z takimi danycmi dla cout żeby było 0.0000293 dla 2.93e-05 ? ta liczba to prawda jest bardzo mała, czy istnieje funkcja jakaś aby podała wartość 0.0000293 dla 2.93e-05 w momencie cout.?

Althorion
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1620
2

Jest — wyżej opisane setprecision, którą, jak pisałeś, masz niedostępną. Co mnie dziwi, bo jak masz cout, to powinieneś mieć i to… Ale niezbadane są microsoftowskie implementacje biblioteki standardowej… 🤷

DZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Podaj nazwę miejscowości
0

A nie możesz zwrócić wyniku w sensowniejszych jednostkach typu "ms" bądź "μs"?
Albo jeszcze lepiej - uzależnić używaną jednostkę w zależności od wartości którą trzeba wyświetlić.

wilkwielki napisał(a):

ja osobiście napisałem 4 konwertery z str na int , str na float , float na str , int na str , a takie coś 2.93e-005 to diabeł wie jak napisać konwerter bo jest mieszanka liter z cyframi i to w dodatku zaszyfrowane jakoś dziwnie ...

dzizus
Ta mieszanka liter z cyframi czym jest to już inni napisali. Jeśli robisz jakiś zaawansowany konwerter tekstowy tego do czegoś innego to wiedz, że możesz wartość przed "e" potraktować jako liczbę zmiennoprzecinkową a liczba po "e" oznacza o ile miejsc dziesiętnych (i w którą stronę) przesunąć przecinek.

btw
Czy takie zajęcie ma dziś jakikolwiek sens?

wilkwielki
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 678
0

w tym rzecz, rozumiem, dobra dzięki za pomoc, myślę, że temat zamknięty

AN
  • Rejestracja: dni
  • Ostatnio: dni
1

Kiedyś miałem podobny problem, tyle, że zamienić float/double na std::string. Przede wszystkim, chodziło o wypisanie w postaci zwykłej (nie naukowej/wykładniczej) tyle miejsc po przecinku, ile trzeba:

https://github.com/andrzejlisek/WasmInfo/blob/master/prog/hex.cpp - funkcja std::string hex::floatToStr(double Num, int Digits) i funkcja pomocnicza std::string hex::floatToStr_(std::string NumStr, int Digits)Jako parametr wchodzi zmienna liczbowa i liczba cyfr znaczących. Liczba cyfr znaczących jako parametr jest po to, żeby uciąć "ogon" wynikający z niedoskonałości liczb zmiennoprzecinkowych, czyli liczbę 5.12300000001 lub 4.122999999999 zapisze jako 5.123. Metodą prób i błędów doszedłem, że dla float liczba cyfr znaczących to 7, a dla double liczba cyfr znaczących to 15.

Starszy projekt, w którym pierwotnie miałem taki sam problem z zapisaniem liczb.
https://github.com/andrzejlisek/ScriptSDCCWeb/blob/main/ProjWeb/prog/scriptshared.cpp
Jest to funkcja SwapGetStr, a właściwie jej część pod "case 10", i funkcja pomocnicza "FloatingPointCorrect", która pracuje już na tekście.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

fmtlib ma/miało przez długi czas wsparcie dla starych kompilatorów, może popróbuj starsze wersje.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.