我想将Java舍入BigDecimal
到一定数量的有效数字(非小数位),例如4位数:
12.3456 => 12.35
123.456 => 123.5
123456 => 123500
基本问题是如何找到数量级BigDecimal
,所以我可以决定小数点后使用多少个地方。
我能想到的只是一个可怕的循环,除以10直到结果<1,我希望有更好的方法。
顺便说一句,这个数字可能非常大(或非常小)所以我无法将其转换为双倍以使用登录它。
发布于 2019-03-22 13:36:35
easierst解决方案是:
int newScale = 4-bd.precision()+bd.scale();
BigDecimal bd2 = bd1.setScale(newScale, RoundingMode.HALF_UP);
不需要字符串转换,它完全基于BigDecimal
算术,因此尽可能高效,您可以选择它RoundingMode
并且它很小。如果输出应该是String
,只需追加.toPlainString()
即可
发布于 2019-03-22 14:04:37
有人可能会想出一个更好的解决方案,但首先想到的是将它放入StringBuilder中,检查它是否包含'。' 并返回一个适当长度的子串。例如:
int n = 5;
StringBuilder sb = new StringBuilder();
sb.append("" + number);
if (sb.indexOf(".") > 0)
{
n++;
}
BigDecimal result = new BigDecimal(sb.substring(0, n));
https://stackoverflow.com/questions/-100008988
复制相似问题