0
votes

KOTLIN: Vérifiez si une double valeur est comprise entre 0,0 et 1,0 étage de 0,1

Quelle serait une solution simple / élégante pour vérifier si une double valeur n'est que dans l'ensemble de
{. 0, .1, ..9, 1.0} valeurs.

en ce moment je fais maintenant xxx

et vérifier si une double valeur contient.

existe une solution plus simple / élégante? < / p>


4 commentaires

Multipliez par 10 et voyez si cette valeur est un entier?


Comment vérifieriez-vous si les décimales de résultat sont toutes 0 à la fois?


@Dachstein Stackoverflow.com/a/9898528


Honnêtement, à moins que les chiffres ne changent beaucoup, l'ensemble que vous avez maintenant semble simple et facile à comprendre.


3 Réponses :


1
votes

Vous pouvez le faire avec séquences .

fun contains(d: Double) = d nearlyIn (0.0..1.0 step 0.1)


1 commentaires

Malheureusement 0,1 + 0,1 + 0,1 n'est pas 0.3 :(



1
votes

Étant donné que vous n'êtes vraiment vraiment inquiet de la position TENS, je voudrais simplement le changer une fois et vérifier 0..10: xxx

essais avec play.kotlinlang.org: < / p> xxx

sorties: xxx

Si vous êtes moins inquiet pour l'élégance et plus sur la performance, vous pouvez simplement faire: < / p> xxx

qui évite d'allouer des ensembles ou des gammes entièrement. Si la plage n'est pas dynamique, j'irais simplement avec cela, personnellement.


3 commentaires

Solutions intéressantes. Merci


Bien que ce soit une solution "correcte" en fonction des exigences déclarées de l'OP, cela me laisse mal à l'aise, car il compare les deux valeurs doubles pour l'égalité. Cela ne compare pas qu'une valeur est, disons exactement 0,3; Il est en fait comparer qu'une valeur est exactement égale à la représentation binaire IEEE que le compilateur crée lorsqu'il rencontre la valeur littérale "0.3" dans le code source. Ils sont deux choses différentes. Je préférerais beaucoup comparer avec une tolérance donnée.


C'est un point juste. Je suppose que cela dépend de la manière dont les valeurs sont générées mais que la comparaison avec une tolérance donnée serait définitivement plus sûre.



0
votes

Cela le fera si vous souhaitez vérifier les étapes de 0,1 pour tout double. Multipliez par 10, vérifiez si le résultat est un entier.

fun isSpecial(v:Double) : Boolean {
    val y = v*10
    return y == y.toInt().toDouble()
}


0 commentaires