Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: muuttujan tyypin muunnos

tkok [15.11.2008 13:18:15]

#

Hei taas kaikki prot.

Aloitin javan opiskelun pari viikkoa sitten ja nyt olen kyllästynyt, koska java on erittäin vahvasti tyypittyny.

Otsikko antaa jo aika vahvasti kysymyksen ilmi: Miten muutan double muuttujan int muuttujaksi?

Hauilla löysin vain stringgien muuttamisia numeroiksi ja toisin päin.

1. yritin vain kylmästi tallentaa double a muuttujaan int b mutta errorina tuli data maybe loss.
2. yritin tehdä oman metodin positiivisille luvuille jolle annetaan argumenttina double ja palautuksena tulee int:

Hidas tapa, tiedän kyllä.

private static int muunnos(double x){
		int tulos;
		if(x>2147483647){System.out.println("ERROR liian suuri luku intiksi");}
		else{
			if(x<0){System.out.println("ERROR tämä metodi on vain positiivisille luvuille");}
			else{
				while(Math.round(x) > 0){
					tulos = tulos+1;
					x=x-1;
				}
			}
		}

		return tulos;
	}

Tämäkään ei toiminut, koska errorina luki että tulos-muuttuja saattaa saada luvun jota ei voida tallentaa inttinä. :S

Lienee olemassa jokin nopea valmis tapa muuttaa doublet intiksi?
kiitos

Antti Laaksonen [15.11.2008 13:23:21]

#

Voit ilmoittaa haluamasi uuden tyypin muuttujan nimen edessä suluissa:

// b:n tyyppi int, a:n tyyppi double
b = (int)a;

Java-kääntäjä on kyllä siinä oikeassa, että tämä muunnos voi kadottaa tietoa.

kayttaja-2499 [15.11.2008 13:37:32]

#

Jos et käytä 2^31-1 suurempia tai -2^31 pienempiä double arvoja, voit muuntaa ne seuraavasti:

double x = 123.123;
int tulos = Math.round(x); // jos haluat pyöristää
tulos = (int)x; // jos pelkkä desimaalien pudotus riittää

tkok [15.11.2008 14:03:54]

#

kayttaja-2499 kirjoitti:

Jos et käytä 2^31-1 suurempia tai -2^31 pienempiä double arvoja, voit muuntaa ne seuraavasti:

double x = 123.123;
int tulos = Math.round(x); // jos haluat pyöristää
tulos = (int)x; // jos pelkkä desimaalien pudotus riittää

Math.round metodi pyöristää luvun kyllä kokonais luvuksi mutta sen tyyppi on edelleen double jolloin sitä ei voi sijoittaa int tulos muuttujaan.

Mutta tämä (int) toimii hyvin, kiitos vastausksista

ps. pyöristyksen voi laittaa näin: tulos = (int)Math.round(x);

jlaire [15.11.2008 15:56:56]

#

tkok kirjoitti:

Math.round metodi pyöristää luvun kyllä kokonais luvuksi mutta sen tyyppi on edelleen double

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Math.html:

round(double a)
Returns the closest long to the argument.

round(float a)
Returns the closest int to the argument.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta