我有点困惑,因为我一直失去精度。双精度丢失
也许我操作的类型不对。我有一个像“100.00”的字符串。但是当我做
Double.parseDouble(“100.00”)它被切断为100.需要帮助。提前致谢。
我有点困惑,因为我一直失去精度。双精度丢失
也许我操作的类型不对。我有一个像“100.00”的字符串。但是当我做
Double.parseDouble(“100.00”)它被切断为100.需要帮助。提前致谢。
您可能已打印您的电话号码System.out.println(d)
。它将在内部呼叫Double.toString(double)
,其规格状态为
必须为m或a的小数部分打印多少位数?必须至少有一位数字来表示小数部分,并且除此之外还需要多少位数,但只需要多少位数来唯一地区分参数值和类型为double的相邻值。
这是因为double
数字没有“小数精度”的概念。它是一个二进制数字与固定二进制精度(二进制点后的二进制数字的数量)。
只需使用BigDecimal的,而不是双这样的:不是在所有
BigDecimal houndred = new BigDecimal("100.00").setScale(2, BigDecimal.ROUND_HALF_UP);
的BigDecimal不松动的精度。另外,您可以根据自己的喜好设置比例,精度和舍入模式。
这不会损失精度。这只是格式不同。 – Kayaman
它可能没有被切断,但在打印时被忽略,因为它不会添加信息。除此之外,正如Kayaman已经指出的那样,这不是精确度的损失。精确度的损失可能类似于161.0 * 0.7 = 112.69999,而不是112.7。 – Thomas
在二进制文件中,你认为'100'和'100.00'之间的区别是什么? –