我想将 String 类型变量中的十进制数传递给 Double 类型之一,但在使用 DecimalFormat (导入 java.Text.DecimalFormat)应用特定格式之前,它总是有 3 个小数位。执行转换时,我总是丢失小数,更准确地说是右边为 0 的小数。
您知道如何在不丢失精度的情况下执行此转换吗?
我发现使用 BigDecimal 类型可以解决问题,但我想在不使用它的情况下进行此转换。
干杯,
例如:
Double d = 0.85; // 0.85
DecimalFormat mf = new DecimalFormat("#0.000");
String s = mf.format(d); // "0,850"
s = s.replace(',', '.'); // "0.850"
double conv = Double.parseDouble(s); //0.85
//Como pasar del String s = "0.850" -> Double = 0.850?
您的转换是正确的:
我认为不需要在 double 类型的值中添加小数点后为零的小数。
如果小数点后的小数点为 0,就好像它们不存在一样:
如果我们定义一个小数点右边为零的变量,小数点后:
价值将永远是
0.85
如果我们定义一个右边有小数的变量,并且小数点后有一个不为零的数字:
那么值将是
0.8500000000001
如果您只想打印该值并确保您拥有所有小数,您可以使用setMinimumFractionDigits()
在这里,您将获得一个值:
0.850
其实并没有这种方法,因为有一个很大的问题:
double
编码的。例如,使用本网站上的计算器,十进制数字 0.850 对应于这个二进制数字:
省略号表示该数字是重复的(与 1/3 = 0.33333... 相同)。当我们删除省略号并将二进制数字放在该页面上以转换回十进制时,我们得到:
0.850 在十进制中有三位,但在二进制中有无限多。这意味着当我们写
double x = 0.850
的时候,值x
实际上并不是 0.850,而是一个接近0.850 的数字,我们无法判断它最初是写成 0.85、0.850 还是 0.8500。如果类型中固有的近似值
double
对于需要精确表示十进制数字的某些应用程序是不可接受的,请使用BigDecimal
.