Je veux implémenter ou utiliser une bibliothèque pour une coupure décimale intelligente. Je veux dire que je voudrais obtenir: de 3.456432 -> 3.4, de 0.0000023232432 -> 0.000002 et de 0.000000000001 -> 0.0 (ou quelque chose comme ça). J'ai besoin de cette fonctionnalité pour une interface graphique utilisateur conviviale. Par conséquent, je dois réduire le nombre de chiffres qui ne sont pas égaux à zéro. J'ai besoin de garder 1-3 chiffres les plus significatifs et d'autres mis à zéro.Comment faire couper décimal intelligent en Java?
Répondre
Si cela vous aide, vous pouvez utiliser la méthode suivante pour arrondir un double à un nombre spécifié de chiffres significatifs. Il n'y a cependant aucune fonctionnalité dans l'API standard pour produire le résultat d'une manière raisonnable:
private static double round(double v, int sigDigits) {
double f = Math.pow(10, Math.ceil(Math.log10(Math.abs(v))) - sigDigits);
return Math.round(v/f)*f;
}
Cela fonctionne bien pour les grands nombres mais pour les petites situations, c'est pire. Par exemple, il arrondit 0.000012 en 1.2299999999999999E-5. Ce n'est pas ce que je veux. – MaXal
Ce ne sera pas 0.000012. Parce que dans ce cas nous avons deux chiffres significatifs: 1 et 2 donc nous ne pouvons pas les arrondir. – MaXal
Avez-vous jeté un oeil à l'API DecimalFormat
?
DecimalFormat
est une sous-classe concrète deNumberFormat
que les formats décimal chiffres. Il a une variété de fonctionnalités conçu pour permettre d'analyser et les numéros de format dans tous les paramètres régionaux, , y compris le soutien pour les chiffres occidentaux, arabes, et Indic. Il prend également en charge différents types de nombres, y compris entiers (123), les nombres à virgule fixe (123,4), la notation scientifique (1,23E4), pourcentages (12%) et la devise montants (123 $). Tous ces éléments peuvent être localisés.
Depuis Java 5, java.util a une classe Formatter qui peut faire ce dont vous avez besoin.
Si vous arrondissez alors 3.456432 devrait arrondir à 3.46. – DwB
Il semble que vous ayez besoin de comprendre ce que vous entendez par "coupure intelligente". La mise en œuvre devrait être facile après cela. D'après vos exemples, il semble que vous vouliez arrondir à la fois un certain nombre de chiffres significatifs et une certaine précision absolue? – Cascabel
Qu'entendez-vous par coupure décimale intelligente? – CoolBeans