Java 数学有什么原因吗?round*1000/1000不';没有道理

Java 数学有什么原因吗?round*1000/1000不';没有道理,java,javascript,android,math,rounding,Java,Javascript,Android,Math,Rounding,我正在看这行代码,我无法理解它。这段特定的代码是javascript,但我最终想制作一个java android应用程序 $("#TxtHalfDot").val(Math.round((60000/bpm)*3*1000)/1000); //bpm being a user entered value 我理解数学的过程,并且已经用计算器计算过很多次了。然而,我无法理解*1000后面跟着/1000的含义 我的问题 这是“math.round”函数的一种奇怪行为,还是根本不

我正在看这行代码,我无法理解它。这段特定的代码是javascript,但我最终想制作一个java android应用程序

$("#TxtHalfDot").val(Math.round((60000/bpm)*3*1000)/1000); 

         //bpm being a user entered value
我理解数学的过程,并且已经用计算器计算过很多次了。然而,我无法理解*1000后面跟着/1000的含义

我的问题

这是“math.round”函数的一种奇怪行为,还是根本不需要它。我看过很多,但当我看它的时候,我觉得它可以省略,但我不是一台电脑


(60000/bpm)*3给出了相同的结果((60000/bpm)*3*1000)/1000

如果仔细观察,您会发现整项在四舍五入后被除以1000

因此,它不仅仅是数学上的x*1000/1000,
四舍五入(a*1000)/1000
结果是数字
a
四舍五入为3位小数

例:数学四舍五入(1234.123456*1000)/1000=1234.123

其工作原理如下:
假设数字
a
x
小数(在我们的示例6中)。将该数字乘以10,乘以
n
(在我们的示例3中)的幂,有效地将小数点
n
数字向右移动。然后对数字进行四舍五入(去掉所有小数)。然后除以10,取n的幂,将小数点向后移动。

这与括号有关

Math.round((60000/bpm)*3*1000)/1000
全文是

将60000除以bpm,然后乘以3000,然后执行数学运算。四舍五入,然后除以1000


在除以1000之前,您将舍入一个可能的浮点值,这样我们就清楚javascript与java没有任何关系。这是一个纯javascript问题吗?
round(1.12345*1000)/1000
如果我没有弄错的话,结果应该是
1.234
数学。round(1/3*1000)/1000!==Math.round(1/3)//true@C5H8NNaO4我想你的意思是
Math.round((1/3*1000))/1000!==数学圆(1/3)
@gcoulby
0.333
~(1/3*1E3)/1E3
)与
0
~(1/3
)不太相似。你能解释一下为什么有3个小数吗?我认为如果是*100)/100,会有2个小数,还是我不明白?你是对的。小数的数目等于你乘和除的数字的以10为底的对数。我会在回答中解释。非常透彻的解释。证明这一点确实有用(在编程意义上)。
Math.round(a*1000)/1000
得到的数字约为
a
,在点后四舍五入为三位小数。在JavaScript中使用的浮点系统中,大多数具有三个十进制数字的数字无法精确表示,因此结果只是近似值。