我尝试了很多方法将Double转换为带有String.format()和DecimalFormater的精确十进制字符串,到目前为止我找到了这个:
String s = "-.0000000000000017763568394002505";
Double d = Double.parseDouble(s) * 100;
System.out.println((new java.text.DecimalFormat("###########################.################################################################################")).format(d));
我并不是我的解决方案的粉丝,因为制作一个不能涵盖所有案例的巨大模式对我来说很难看。
你还有另一种方法吗? 我真的希望 ALL 小数,没有科学记数法,没有尾随零。
由于
P.S。:我需要这个没有外部库和Java 1.7。
答案 0 :(得分:4)
似乎你必须处理一些精确度。 double不适合此用途。更好地使用BigDecimal
String value="13.23000";
BigDecimal bigD=new BigDecimal(value);
System.out.println(bigD);
System.out.println(bigD.stripTrailingZeros().toPlainString());
答案 1 :(得分:1)
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());
}
}
答案 2 :(得分:0)
试试这段代码: 您也可以使用toString()方法,但它使用科学记数法。 https://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#toPlainString()
BigDecimal bd = new BigDecimal("-.0000000000000017763568394002505");
System.out.println(bd.toPlainString());