我有点困惑,因为我一直都失去精确度。
也许我的操作类型错误。我有一个像“100.00”的字符串。但是当我做的时候
Double.parseDouble(“100.00”)它被切断为100.需要帮助。提前谢谢。
答案 0 :(得分:4)
您可能会使用System.out.println(d)
打印您的号码。它将在内部调用Double.toString(double)
,其规范状态为
m或a的小数部分必须打印多少位数?必须至少有一个数字来表示小数部分,并且除此之外必须有多个,但只有多少,更多的数字才能唯一地将参数值与double类型的相邻值区分开来。
这是因为double
数字没有"十进制精度"的概念。它是一个二进制数字,具有固定的二进制精度(二进制点后的二进制数字)。
答案 1 :(得分:0)
只需使用BigDecimal而不是Double:
BigDecimal houndred = new BigDecimal("100.00").setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal根本没有松动精度。此外,您可以根据需要设置比例,精度和舍入模式。