我有下面的代码,我的精度在转换时迷失BigDecimal了String.对此的任何帮助真的很感激.
预期结果:95.10000000000000%
实际结果:95.09999999999999%
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;
}
Run Code Online (Sandbox Code Playgroud)
用这个实例创建
new BigDecimal(95.1)
Run Code Online (Sandbox Code Playgroud)
你正在失去一些精确度.你实际上可以做的是使用字符串构造函数:
new BigDecimal("95.1")
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用工厂方法:
BigDecimal.valueOf(95.1)
BigDecimal.valueOf(100)
Run Code Online (Sandbox Code Playgroud)
在内部,它们使用这些数字的字符串表示来创建BigDecimal对象.
| 归档时间: |
|
| 查看次数: |
4155 次 |
| 最近记录: |