我在互联网上进行了很多搜索,但找不到令人满意的解决方案。我做的最好的是:
String b = new BigDecimal(floatNumber.stripTrailingZeros().toPlainString();
但它有一些讨厌的错误,例如,如果数字是 1.6,我得到 1.600000744(或类似的)。
谢谢
我在互联网上进行了很多搜索,但找不到令人满意的解决方案。我做的最好的是:
String b = new BigDecimal(floatNumber.stripTrailingZeros().toPlainString();
但它有一些讨厌的错误,例如,如果数字是 1.6,我得到 1.600000744(或类似的)。
谢谢
您所看到的实际上不是错误,它只是使用精度有限的浮点数的结果。它不能准确地表示 1.6。
如果您希望打印在某个点之后截断数字,您可以使用前面提到的 DecimalFormat 执行此操作:
String result = new DecimalFormat("#.##").format(floatNumber).toString()
这将打印两位小数,在小数点后添加任意数量的#'s 以被截断。但是从技术上讲,您看到的是 floatNumber 的正确值,即使您不想要那么高的精度。
试试这个,
DecimalFormat twoDecForm = new DecimalFormat("#.##");
String b = twoDecForm.format(Double.parseDouble(Float.toString(floatNumber)));