Sprawdzanie wartości po przecinku

Sprawdzanie wartości po przecinku
Asmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Olsztyn
0

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

Kopiuj
(s*10)%10==5

Lecz to nie pyka bo kompilator zwraca:

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

Jakieś pomysły? :D

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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:

Kopiuj
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.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2
Kopiuj
static_cast<int>(s*10) % 10 == 5;
fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
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)

Asmal
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Olsztyn
0

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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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

mwl4
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 404
0

Albo:

Kopiuj
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.

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.