0
votes

convertir un numéro à int si c'est un nombre entier d'autre convertir pour flotter

J'essaie d'extraire un numéro de la chaîne, puis vérifiez s'il s'agit d'un Int ou double. S'il s'agit d'un entier, je convertissez le numéro en utilisant TOIN code>. S'il ne convertit pas alors à la double utilisation en utilisant todouble code>.

val str = 50 units
val num = str.split("\\D+").filter(_.nonEmpty)
val y = num(0).toDouble
val x = num(0).toInt
if (x==y) {
  x
  //print("int")
} else {
  y
  //print("double")
}


1 commentaires

Pourriez-vous donner des exemples d'entrée / sortie attendus? Il est très difficile de comprendre quelle est votre sortie attendue pour quel type d'entrée.


3 Réponses :


0
votes

simple et délicat xxx

ou vous pouvez utiliser regex ou scala.util.try.


0 commentaires

2
votes

1er problème - vous divisez sur des caractères non chiffres, il sera donc divisé sur le point . et vous n'obtiendrez jamais le bon double valeur.

2ème problème - Le x et y Les variables seront toujours être égales Ils viennent tous les deux de la même chaîne de chiffres. 50 == 50.0 est toujours vrai .

3ème problème - même si le si la condition est toujours true et renvoie donc toujours la valeur int dans x , résultat du si est est < Code> Double Parce qu'un instruction si doit renvoyer un seul type. Celui-ci tente de renvoyer un int ou a double , donc la valeur int est élargie à un Double de sorte que les types correspondent.

Alors, ce que vous essayez de faire est peu sain. Vous voulez que ce soit un type ou l'autre. Le système de type tente d'appliquer un compromis ( double ). Si ce n'est pas acceptable, vous pouvez envisager d'envelopper vos types dans un . xxx


1 commentaires

J'ai compris. Merci pour l'explication détaillée.



0
votes

Votre scission n'est pas correcte. Si la chaîne est 50,2 unités , num contiendra 502 . Vous devez utiliser une regex appropriée (je ne vérifie que le premier numéro de la chaîne et il est divisé par "" , au cas où il existe).

Vous pouvez le faire comme ceci (analyse et trouvant Si c'est int ou double ) xxx

vous pouvez jouer avec elle ici


0 commentaires