J'ai ci-dessous le morceau de code et ma précision se perd en convertissant BigDecimal
en String
. Toute aide à ce sujet est vraiment appréciée.
Résultat attendu: 95.10000000000000%
Résultat réel: 95.09999999999999%
Java BigDecimal à la chaîne
public static String getAsString(Object value)
{
if (value == null)
return null;
if (value.toString().length() == 0)
return null;
BigDecimal inputVal = new BigDecimal(value.toString());
if (inputVal == new BigDecimal(0))
return "";
NumberFormat numberFormat = NumberFormat.getPercentInstance(Locale.US);
numberFormat.setMinimumFractionDigits(14);
numberFormat.setMaximumFractionDigits(14);
if (numberFormat instanceof DecimalFormat) {
DecimalFormat df = (DecimalFormat) numberFormat;
df.setNegativePrefix("(");
df.setNegativeSuffix("%)");
}
String num = null;
num = numberFormat.format(new BigDecimal(95.1).divide(new BigDecimal(100)));
return num;
}
Quelle entrée donnez-vous à reproduire le problème? – marstran
De plus, 'inputVal == new BigDecimal (0)' échouera toujours. Aucun objet ne sera jamais identique à un objet nouvellement créé. Utilisez 'equals' à la place. – marstran
@marstran Alors que vous avez raison sur la mauvaise comparaison de référence, 'equals' n'est pas la bonne chose à utiliser, car' equals' pour 'BigDecimal.equals' prend en compte l'échelle (regardez les docs). Vous devriez plutôt utiliser 'BigDecimal.compareTo'. –