Witam,
Mam problem z odpowiednim formatowaniem liczby.
TCHAR tab[] = "12.24";
float fx = _wtof(tab);
teraz fx == 12.24001
W jaki sposób zrobić aby w fx było 12.24 bez zbędnego kombinowania.
Pozdrawiam
No ale to nadal nie rozwiązuje mojego problemu.
Używając typy double mam liczbę z wieloma zerami i na końcu jedynka.
Ogólnie chodzi o to aby porównać dwie liczby typu float z tym że jedną otrzymuję dokładnie z dwoma miejscami po przecinku a jak wiadomo 5 zł i 5 zł i 0.00000000001 gr nie są sobie równe.
Wobec powyższego mam taką pseudo porównywarkę - ale może da się to inaczej zrobić niż przedstawiam - zależy mi na wydajności.
int PriceCmp(TCHAR a[], TCHAR b[])
{
int aa = _wtoi(a);
int bb = _wtoi(b);
if (aa != bb)
{
if (aa > bb) return 1;
else return -1;
}
TCHAR adec[4], bdec[4];
wmemset(adec, 0x00, 4);
wmemset(bdec, 0x00, 4);
int idxa = 0, idxb = 0;
bool akropka = false, bkropka = false;
for(int i = 0; i < 10; i++)
{
if (akropka){
adec[idxa++] = a[i];
if (idxa == 2) break;
}
if (a[i] == '.')akropka =true;
}
for(int i = 0; i < 10; i++)
{
if (bkropka){
bdec[idxb++] = b[i];
if (idxb == 2) break;
}
if (b[i] == '.')bkropka =true;
}
idxa = _wtoi(adec);
idxb = _wtoi(bdec);
if (idxa > idxb) return 1;
if (idxa < idxb) return -1;
return 0;
}
Kodu nie czyałem, ale jeśli porównujesz cenny to dla liczb zmiennoprzecinkowych robi się to tak:
const double KPricePrecision = 0.005;
int PriceCmp( double a, double b) {
double delta = a-b;
if(fabs(delta)<KPricePrecision) {
return 0;
}
if(delta<0) {
return -1;
}
return 1;
}
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.