当前位置: 首页 > 知识库问答 >
问题:

如何知道JavaScript浮点何时不四舍五入?

程墨竹
2023-03-14

例如,当我在控制台中运行0.1+0.2时,它返回0.300000000000000004。然而,当我运行0.1+0.3时,它正确地返回0.4。

是否有任何逻辑可以确定哪些特定的浮动不会被“正确”舍入?

共有1个答案

柳奇希
2023-03-14

Paul23的答案涉及一般原则。这个答案分析了问题中的具体案例。

对于表示十进制数字的每个字符串,舍入到最近将产生一个特定的64位二进制IEEE754数字。下面是问题中数字的映射:

0.1 0.1000000000000000055511151231257827021181583404541015625
0.2 0.200000000000000011102230246251565404236316680908203125
0.3 0.299999999999999988897769753748434595763683319091796875
0.30000000000000004 0.3000000000000000444089209850062616169452667236328125
0.4 0.40000000000000002220446049250313080847263336181640625

在转换为浮点时,0.1和0.2都向上取整,因此它们的和将大于0.3。另一方面,0.3向下舍入,所以和大于最接近0.3的浮点。两个方向的舍入误差均为2.77555756156289135105907917022705078125E-17,但舍入到偶数规则会导致四舍五入。

 类似资料:
  • 问题是,每当我使用“System.out.printf(”%.2F\n“,BMI)”时,输出将四舍五入,而不是切断小数点的其余部分。下面是我的代码:

  • C和C++提供了几种宽度的浮点数据类型,但它们没有指定精度。编译器可以自由地使用理想化的算术来简化表达式,使用双精度来计算值上的表达式,或者使用双精度寄存器来保留变量或公共子表达式的值。 纠正我如果我是错的是错的,请参见编辑,但是将内存中的提升到双精度寄存器中也是合法的,所以存储一个值然后加载回来并不一定会截断位。 将一个数字转换成一个较低精度的最安全、最便携的方法是什么?理想情况下,在SSE2上

  • 问题内容: 假设我有,我想将其转换为。如何在Python中完成此操作? 给与不。我是Python或一般编程的新手。 我不想将其打印为字符串,结果将被进一步使用。有关此问题的更多信息,请查看 Tim Wilson的Python编程技巧:贷款和付款计算器 。 问题答案: (或的结果)正确舍入为小数点后两位。数学上,这听起来像您想要的是天花板功能。Python模块中的一个名为: 地板和天花板功能通常分别

  • 问题内容: 我正在使用java.util.Random生成随机高斯。我需要将此高斯转换为浮点值。但是,高斯是双精度的,因此我需要某种方式进行舍入然后将其转换为浮点数。我需要四舍五入到最接近的整数。这是我的问题:如何? 问题答案: 要么 取决于您是指“四舍五入到最接近的整数”(四舍五入)还是“向上舍入”(上限)。 当心将双精度数转换为浮点数时会失去精度,但这在这里不应该成为问题。

  • 本文向大家介绍如何用浮点值四舍五入MySQL列并在新列中显示结果?,包括了如何用浮点值四舍五入MySQL列并在新列中显示结果?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是查询以舍入浮动记录并将结果显示在新列中- 这将产生以下输出-

  • 问题内容: 我想将双精度值四舍五入到2个小数点。 例如:我有双d = 2;结果应为result = 2.00 问题答案: 内部表示形式在2和2.00之间没有差异。您可以使用四舍五入的值到最接近的整数- 使该轮为2位小数,你可以乘100,圆形,再除以100,但你不应该期望的结果是 准确 2DPS,由于二进制浮点运算的性质。 如果您只想将值 格式化 为两位小数,请查看-如果您对 计算中 的小数位数感兴