Java 中的化学平衡器
我正在为化学公式制作一个应用程序,并且我已经制作了它,以便它返回双系数。
例如,C6H12O6 + O2 = CO2 + H2O 将返回 0.166666667、1.0、1.0 和 1.0。我想编写代码使其为 1、6、6 和 6(整数)。另外,对于另一个方程,例如 Ca(OH)2 + H3PO4 = Ca3(PO4)2 + H2O,返回值为 0.5、0.333333333、0.166666667 和 1.0。它应该是 3、2、1 和 6。有没有办法可以在 Java 中将它们转换为整数系数?
I'm making an app for a chemical formula, and I have made it so that it returns double coefficients.
For example, C6H12O6 + O2 = CO2 + H2O returns .166666667, 1.0, 1.0, and 1.0. I want to write code so that it is 1, 6, 6, and 6 (integers). Also, for another equation, like Ca(OH)2 + H3PO4 = Ca3(PO4)2 + H2O, the return is .5, .333333333, .166666667, and 1.0. It should be 3, 2, 1, and 6. Is there a way I can convert these to integer coefficients in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用分数库(例如 apache 的这个)进行计算。它将把你的计算结果保留为分数。然后,您可以使用
Fraction.getDenominator()
查找公共系数并将其余系数乘以它。Do your calculations using a fraction library (like this one by apache). It will keep the results of your calculations as fractions. You can then use
Fraction.getDenominator()
to find the common one and multiply the rest of your coefficients out by it.使用适当的类型。在您的情况下,这将是一个不存在的分数类型(在 JDK 中, Google 是你的朋友))但是。前往 维基百科 或 math.stackexchange.com 来更新您对它们的了解。
平衡后,使用找到所有分母的最小公倍数来获得整数分数。
Use the appropriate type. In your case, that would be a fraction type which doesn't exist (in the JDK, Google is your friend), yet. Go to Wikipedia or math.stackexchange.com to freshen up your knowledge about them.
After you did the balancing, use find the smallest common multiple for all denominators to get integer fractions.
正如 Aaron 所说,有理类型不是 Java 标准类型。
但是,有一些外部库提供了它,例如 JScience 及其
理性
类型。不幸的是,没有关于 Android 平台潜在可用性的信息。如果情况并非如此,请尝试从中获得灵感来创建自己的理性类。Like Aaron suggests, the rational type is not a Java standard one.
However, there are external libraries providing it, like JScience with its
Rational
type. Unfortunately, there is no information about a potential availability for the Android platform. If it's not the case, try get inspiration from it to create your own rational class.