我有下面的一段代码,我的精确度在将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'。 –