Ich habe unter Stück Code und meine Präzision geht verloren beim Konvertieren BigDecimal
zu String
. Jede Hilfe wird sehr geschätzt.
Erwartetes Ergebnis: 95.10000000000000%
Tatsächliches Ergebnis: 95.09999999999999%
Java BigDecimal zu String
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;
}
Welche Eingabe geben Sie es um das Problem zu reproduzieren? – marstran
Außerdem wird 'inputVal == new BigDecimal (0)' immer fehlschlagen. Kein Objekt wird jemals das Gleiche sein wie ein neu erstelltes Objekt. Verwenden Sie stattdessen "equals". – marstran
@marstran Während Sie mit dem falschen Referenzvergleich recht haben, ist 'equals' nicht das Richtige, da' equals' für 'BigDecimal.equals' die Skalierung berücksichtigt (sehen Sie sich die Dokumentation an). Sie sollten stattdessen 'BigDecimal.compareTo' verwenden. –