我知道0.1十进制数不能用有限的二进制数精确地表示(解释),因此double n = 0.1将失去一些精度,并且将不精确0.1。另一方面,0.5因为它确实可以表示0.5 = 1/2 = 0.1b。 话虽如此,将0.1 三遍相加并不完全是可以理解的,0.3因此,以下代码将输出false: double sum = 0, d = 0.1; for (int i = 0; i < 3; i++) sum += d; System.out.println(sum == 0.3); // Prints false, OK 但是,0.1 五次相加会得到确切的结果0.5呢?以下代码显示true: double sum = 0, d = 0.1; for (int i = 0; …
public class doublePrecision { public static void main(String[] args) { double total = 0; total += 5.6; total += 5.8; System.out.println(total); } } 上面的代码打印: 11.399999999999 我如何才能仅打印(或将其用作)11.4?
给定一个double,我想将其四舍五入到小数点后的给定精度点,类似于PHP的round()函数。 我在Dart文档中可以找到的最接近的东西是double.toStringAsPrecision(),但这不是我所需要的,因为它包括精度总点中小数点前的数字。 例如,使用toStringAsPrecision(3): 0.123456789 rounds to 0.123 9.123456789 rounds to 9.12 98.123456789 rounds to 98.1 987.123456789 rounds to 987 9876.123456789 rounds to 9.88e+3 随着数量的增加,我相应地失去了小数点后的精度。