我有下面的一段代碼,我的精確度在將BigDecimal
轉換爲String
時丟失了。任何幫助,真的很感激。
預期結果:95.10000000000000%
實際結果:95.09999999999999%
Java BigDecimal轉爲字符串
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;
}
你給什麼輸入它來重現問題? – marstran
此外,'inputVal == new BigDecimal(0)'將始終失敗。沒有任何物體永遠不會像新創造的物體一樣。改用'equals'。 – marstran
@marstran雖然你對錯誤的引用比較是正確的,但equals不是正確的使用方法,因爲BigDecimal.equals中的equals是考慮了規模的(查看文檔)。 您應該改用'BigDecimal.compareTo'。 –