Java 将小数更改为整数(不舍入)

Java 将小数更改为整数(不舍入),java,Java,因此,我正在制作一个应用程序,可以用经验公式解决问题,我需要一些代码,可以执行以下操作: 如果数字为2.5、1、3,则应将其更改为2.5*2=5、1*2=2、3*2=6,以便将带小数的数字转换为整数,并适当调整其他数字 我想到了这个逻辑: for(n=1;(Math.round(simplestRat[0])*n)!=(int)simplestRat[0];n++) 增加一个计数器,该计数器将乘以一个整数,以实现我所希望的功能,但即使在这个阶段,我也对这段代码持怀疑态度,认为它不会起作用 这将是

因此,我正在制作一个应用程序,可以用经验公式解决问题,我需要一些代码,可以执行以下操作: 如果数字为2.5、1、3,则应将其更改为2.5*2=5、1*2=2、3*2=6,以便将带小数的数字转换为整数,并适当调整其他数字

我想到了这个逻辑:

for(n=1;(Math.round(simplestRat[0])*n)!=(int)simplestRat[0];n++)

增加一个计数器,该计数器将乘以一个整数,以实现我所希望的功能,但即使在这个阶段,我也对这段代码持怀疑态度,认为它不会起作用

这将是一个很大的帮助,如果有人可以建议这方面的代码或改进这一代码,甚至给我一个链接到另一个帖子这个问题,因为我无法找到任何关于这类问题


感谢您的帮助。谢谢

好的,所以你必须有几个步骤。首先,把它们全部换成整数。最简单的方法是找到一个适当的十次方,将它们全部相乘,使它们成为整数。这是一个有用的检查:

然后将它们转换为整数,并开始通过它们查找公共素数因子。这将是一个类似于Eratosthenes's Sieve()的过程,但最后会进行分割。对于每个素数,请查看是否所有3个数字都被它精确除(模素数==0)。如果是,则将素数除以并重置为2。如果他们没有,下一个首相


这将为您提供两个数字之间的最低公共比率。任何来自原始阶段的附加乘法器都可以通过公共素数方法去除

如果你用浮点数来表示小数,你很可能会遇到一些舍入错误,试图找到一个整数——只有一个数字是小数?它必须是尽可能最小的乘法器,还是仅此而已?找到每个小数点的有理表示形式,你想与之相乘的数字是每个分数中除数的lcm。如果你想让这个数字尽可能的小,确保你的分数是不可约的。另一个选择是找到这个数字的小数位数,然后用10乘以它的幂(比如1.25,乘以100)。在这之后,您可以开始将它减少到最小整数,然后将其他数字与出现的因子相乘。您是正确的,在Java中尝试相乘浮点数是行不通的。就像@KevinDiTraglia指出的,在某个时刻,你会得到类似
1.5*2=2.999999…
。无论使用什么算法,您可能都需要使用支持任意精度的工具。在用我的代码绕圈子运行了大约一个小时后,我终于让它工作了。从我制作的显示素数的旧程序中提取了一段代码。工作起来很有魅力。非常感谢菲利克斯!