sprawdzic czy liczba typu float jest calkowita

0

czolem,

mam w wyniku liczbe typu float. jak szybko sprawdzic czy jest calkowita?

pozdrawiam,
wk

0
private boolean jestCalkowita(float f){
     return f%1 == 0.0f;
}
0

ten warunek niestety nie dziala jak powinien. ostatni if przepuszcza mi niestety wszystkie kolejno wygenerowane tablice o czym swiadcza kolejno ulozone wartosci zmiennej petla. wzialem pierwszy wynik z brzegu z tablicy i sprawdzilem. wyszly mi wartosci ulamkowe a nie calkowite. help?

import java.util.Random;

public class Main {

	public static boolean jestCalkowita(float f){
	    return f%1f == 0.0f;
	}
	

	public static void main(String[] args)
	{
		int tablica1[][] = new int[4][40];
		int n = 1;
		int j = 0;
		int petla = 0;
		int x = 1;
	
		tablica1[1][j] = 2; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 22; tablica1[2][j] = 2; tablica1[3][j] = 0; j++; 
		tablica1[1][j] = 16; tablica1[2][j] = 3; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 21; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = 5; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 1; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 9; tablica1[2][j] = 1; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 11; tablica1[2][j] = 5; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 15; tablica1[2][j] = 2; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 8; tablica1[2][j] = -7; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 5; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 19; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 30; tablica1[2][j] = -21; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 1; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 35; tablica1[2][j] = 11; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = -17; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = -2; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 25; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -8; tablica1[3][j] = 25; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -12; tablica1[3][j] = 22; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -37; tablica1[3][j] = 25; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -8; tablica1[3][j] = 18; j++;
		tablica1[1][j] = 0; tablica1[2][j] = 0; tablica1[3][j] = 35; j++;
		tablica1[1][j] = 0; tablica1[2][j] = 0; tablica1[3][j] = 25; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -45; tablica1[3][j] = 35; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -4; tablica1[3][j] = 15; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -30; tablica1[3][j] = 25; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -12; tablica1[3][j] = 65; j++;
		tablica1[1][j] = 45; tablica1[2][j] = 19; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 35; tablica1[2][j] = 15; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 35; tablica1[2][j] = 0; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 50; tablica1[2][j] = 29; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 35; tablica1[2][j] = 17; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -400; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -300; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -250; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -150; tablica1[3][j] = 0; j++;
		tablica1[1][j] = 0; tablica1[2][j] = -100; tablica1[3][j] = 0; 
	
		int id = 80 ;  
		int hp = 420; 	int wei = 3648; 	int han = 325;
		
		
		do
		{
			float hpID = 0; 
			float weightID = 0; 
			
			int sumfor = 0; 	
			int sumwei = 0; 	
			int sumhan = 0;
			
			Random rand = new Random();
			
			for (int m = 0; m < 40; m++)
				{
					tablica1[0][m] = rand.nextInt(n+1);
					
				}
					
			for (int i = 0; i<40; i++)
			{
				if (tablica1[0][i] == 1)
				{	
					sumfor += tablica1[1][i];
					sumwei += tablica1[2][i];
					sumhan += tablica1[3][i];
				} 
			}
			
			int totfor = sumfor + hp;
			int totwei = sumwei + wei;
			int tothan = sumhan + han;
	
			weightID = totfor/id*tothan;
			hpID = totwei/tothan*id;
			
		  
			if (jestCalkowita(weightID) && jestCalkowita(hpID))
			{
				for (int y = 0; y < 40; y++)
				{
					System.out.print(tablica1[0][y]);
				}
				System.out.println("      " +petla);	
			}	
			petla += 1;
		} while (x>0);
	}
	
}
0
private boolean jestCalkowita(float f){
     return Math.ceil(f)==Math.floor(f);
}
0

nie no, obie metody sa okej, nie wiem tylko dlaczego na ostatnim warunku wszystkei wyniki traktuje jako true bo drukuje mi kolejno wszystkie wygenerowane tablice.

0

Zrobiłem małą zmianę

                        System.out.println(weightID);
                        System.out.println(hpID);
                        /*if (jestCalkowita(weightID) && jestCalkowita(hpID))
                        {
                                for (int y = 0; y < 40; y++)
                                {
                                        System.out.print(tablica1[0][y]);
                                }
                                System.out.println("      " +petla);
                        }*/

i zobaczyłem,że zmienne weightID oraz hpID mają wartości całkowite.
Poza tym pętla

do
...
while(x>0)

jest nieskończona

0

wiem ze petla jest nieskonczona, bo mialo liczyc przez cala noc ;)
btw, jak recznie wprowadzam wypisane przez komputer wartosci na kalkulatorze to wychodza mi wartosc z przecinkami. nie mam pojecia dlaczego w aplikacji sa one caly czas calkowite. gdzies popelniam blad.

0

aplikacja wyrzucila mi:
totfor = 591 tothan = 488 totwei = 2654 weightID = 3416.0 hpID = 400.0

ale z kalkulatora jasno wynika ze weightID poiwnno byc rowne 3605.1

zgodnie z formula w aplikacji: weightID = totfor/id*tothan;

zatem co jest grane? skad on bierze dane wartosc totfor i tothan ze caly czas podaje mi calkowite?

0
  1. Wynik dzielenia a/b (a,b są typu int) jest w Javie zawsze całkowity.
    Jeżeli chcesz mieć wynik zmiennoprzecinkowy, to używaj rzutowania:
((float)a)/b;
  1. a/b*c jest liczone tak (a/b)c, jeżeli chcesz inaczej, to użyj nawiasów a/(bc)
0

dzieki wielkie! problem rozwiazany, wlasnie o to chodzilo. wszystko dziala cudnie. pozdrawiam i milej reszty dlugiego weekendu

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