2010-06-30 4 views
1

quelqu'un peut-il regarder ce code et me dire pourquoi l'exception se produit?problème avec les entiers

public static void main(String[] args) 
{ 
    int total =100; 
    int discount_Ammount = 20 ; 
     int newAccount=Integer.parseInt(String.valueOf(Math.floor(total - discount_Ammount)).trim()); 
} 

étage de la méthode renvoie la valeur double, alors je ferai couler en entier, donc je l'ai jeté à la chaîne, puis en entier ... S'il vous plaît, quelqu'un peut-il aider?

+1

Quelle exception obtenez-vous? Je devinerai une 'ClassCastException', mais je ne devrais pas avoir à deviner, et je pourrais me tromper. – FrustratedWithFormsDesigner

+1

Pourquoi appelez-vous le plancher? – ChaosPandion

+7

Pourquoi appelez-vous le plancher? En soustrayant deux nombres, vous obtiendrez un int. Pas besoin de plancher la soustraction. – Tommy

Répondre

3

Pas besoin de faire Integer.parseInt (String.valueOf (

Pour lancer int, il suffit de faire (int) (bla)

So int newAccount=(int)(Math.floor(total - discount_Ammount)); 
14

Vous n'êtes pas "casting" quoi que ce soit trim(). supprime les espaces seulement, ce qui ne sera jamais présent dans le résultat de String.valueOf(double)

Utilisez un casting.

int newAccount = (int) Math.floor(total - discount_Ammount); 

Java est un langage de programmation fortement typé, pas un langage de script. Les conversions implicites entre chaînes et d'autres types ne sont pas prises en charge.

Ou, se débarrasser des tout opération floor(), puisque vous travaillez avec une quantité int déjà, et floor() n'a pas de sens:

int newAccount = total - discount_Ammount; 

Si vous travaillez avec de l'argent, utilisez la classe BigDecimal afin que vous peut utiliser les règles d'arrondi requises par votre système de comptabilité. Vous n'en aurez pas le contrôle en utilisant double.

+0

+1 pour la discussion de typage fort – Malfist

+0

dans ce code j'utilise des nombres entiers, mais dans mon programme j'utilise des valeurs doubles donc j'ai besoin de l'opération sol, mais (int) rend le casting très simple, merci pour BigDecimal info et pour la solution. – palAlaa

8

Avez-vous essayé?

int newAccount = (int) Math.floor(total - discount_Ammount); 

Ou même cela!

int newAccount = total - discount_Ammount; 
+0

haha ​​... oui, quelqu'un n'a pas appris sur les types de données :) – Bozho