有没有更好的方法将Double转换为精确的十进制字符串?
我尝试了很多方法使用String.format()和DecimalFormater将Double转换为精确的十进制字符串,到目前为止我发现了这个:
String s = "-.0000000000000017763568394002505"; Double d = Double.parseDouble(s) * 100; System.out.println((new java.text.DecimalFormat("###########################.################################################################################")).format(d));
( https://ideone.com/WG6zeC )
我并不是我的解决方案的粉丝,因为制作一个不能涵盖所有案例的巨大模式对我来说很难看。
你还有另一种方法吗?
我真的想要所有的小数, 没有科学的符号 , 没有尾随零 。
谢谢
PS:我需要这个没有外部库和Java 1.7。
似乎你必须要处理一些精确度。 double不适合此用途。 更好地使用BigDecimal
String value="13.23000"; BigDecimal bigD=new BigDecimal(value); System.out.println(bigD); System.out.println(bigD.stripTrailingZeros().toPlainString());
new BigDecimal("0.1")
和new BigDecimal(0.1)
之间存在很大差异。 使用String构造函数可能会导致尾随零,并且在解析字符串时会失去舍入为double的效果。 如果目标是打印double的确切值,则需要使用BigDecimal的双构造函数。 在double中进行任何算术,而不是BigDecimal。
import java.math.BigDecimal; public class Test { public static void main(String[] args) { String s = "-.0000000000000017763568394002505"; double d = Double.parseDouble(s) * 100; System.out.println(new BigDecimal(d).toPlainString()); } }
试试这段代码:您也可以使用toString()方法,但它使用科学记数法。 https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#toPlainString()
BigDecimal bd = new BigDecimal("-.0000000000000017763568394002505"); System.out.println(bd.toPlainString());