Sprawdzanie wartości po przecinku

0

Chciałbym sprawdzic czy w liczbie typu double po przecinku znajduje się cyfra 5. I jak to zrobić? Probowałem tak:

(s*10)%10==5

Lecz to nie pyka bo kompilator zwraca:

error: invalid operands of types ‘double’ and ‘double’ to binary ‘operator%’|

Jakieś pomysły? :D

4

% nie działa dla liczb zmiennoprzecinkowych, ale masz fmod, przy czym nie wiem czy jest sens go używać.
Możesz zamienić Twoją liczbę na string i sprawdzić pierwszą cyfrę po , lub . (zależnie od locale)

Ale najprościej by było po prostu castować wynik mnożenia na int:

static_cast<int>(s*10)%10 == 5

Zamiast na int możesz chcieć castować na coś większego (np. long, albo long long lub nawet jakiś bigint z jakiejś biblioteki), jeśli przewidujesz, że s*10 może się nie zmieścić w zakresie wartości inta.

2
static_cast<int>(s*10) % 10 == 5;
2

mozesz rozwiazac na kilka sposobow

zamien to do stringa, znajdz pierwsza liczbe po przecinku i sprawdz jaka to jest
pomnoz liczbe przez 10 zrzutuj na inta (po przecinku wszystko zostanie wyrzucone) a nastepnie sprawdz jaka jest ostatnia liczba (przez modulo)

0

Coś myślałem nad stringiem ale stwierdziłem że pewnie istnieje jakiś szybszy sposób ;) Dzięki za szybką odpowiedź :D

1

Jedyną wersja poprawnie działająca dla każdej wartości to skonwertowanie na napis i szukanie w tym napisie ciągu ".5" pozostałe metody mogą nie zadziałać np dla double x=1.5E300;
Ewentualnie użyć fmod: http://ideone.com/AXKEyX

0

Albo:

double liczba = 11.5123;
int calk = static_cast<int>(liczba);
double po_przecinku = liczba - (double)calk;

http://ideone.com/fb5WTs
I wtedy sprawdzasz tą zmienną po_przecinku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1