Algorithm 编写单位转换程序的最简单方法

Algorithm 编写单位转换程序的最简单方法,algorithm,Algorithm,我的问题与语言无关。我想写一个简单的单位转换程序。有转换类型,根据类型有单位。例如,如果我们将长度作为转换类型,那么将有米、英寸、英尺、公里、英里等等。假设有两个下拉框-一个方向是from,另一个方向是to。每个下拉框下面都有一个文本框。简单地说,当我在左手边选择Inch,在右手边选择Mile,并在任一文本框中键入任何数字时,我希望在另一个文本框中显示相应的数字。就像任何普通的单位转换应用程序一样。现在我对此很困惑。用if…else if编写长代码是唯一的方法吗?专业人士会采用什么方法?使用通用

我的问题与语言无关。我想写一个简单的单位转换程序。有转换类型,根据类型有单位。例如,如果我们将长度作为转换类型,那么将有米、英寸、英尺、公里、英里等等。假设有两个下拉框-一个方向是from,另一个方向是to。每个下拉框下面都有一个文本框。简单地说,当我在左手边选择Inch,在右手边选择Mile,并在任一文本框中键入任何数字时,我希望在另一个文本框中显示相应的数字。就像任何普通的单位转换应用程序一样。现在我对此很困惑。用if…else if编写长代码是唯一的方法吗?专业人士会采用什么方法?

使用通用计算单位,例如米。假设你使用米来计算一切,用户选择“英寸到英尺”。然后你必须把第一个单位计算成米,再把米计算成英里。这样,您只需为meter->unit实现比例因子x即可完成MeterToUnitUnitUnitUnit,它将单个米转换为第二个单位的对应值,然后您只需使用

userInput * 1/meter->toUnit(firstUnit) * meter->toUnit(secondUnit) = output

编辑:为了确保数值的稳定性,我建议您使用整数值和非常小的参考单位,例如毫米甚至微米。请参阅注释。

您可以列出单位名称和换算系数。然后在两个下拉框中选择一个项目,并使用换算系数进行计算,并在下面的文本框中显示名称

当然,您需要为每种类型创建一个列表,例如温度、长度等


始终在内部使用国际单位制。

只要预先选择第二个列表框的结果(仅长度、重量、体积等),就可以在每个下拉列表项上设置属性。例如长度、重量、体积等。这样,当您收到下拉列表中更改的事件时,您可能会隐藏下拉列表2中与listbox1中所选项目属性不同的所有元素

您可以设置一个逻辑表。比如:

"Mile", "Foot", 5280
"Foot", "Inch", 12
"Meter", "Milimeter", 1000
...
然后,在下拉列表中选择项目后,您将找到包含这两种类型的列表条目。如果转换为英寸->英尺,则结果的系数为12,反之为1/12

当用户点击Convert时,您将获取列表框中所选项目的值,并在逻辑表中找到它们。然后根据表格的排列将计算结果输入textbox2

例如,用户希望转换英尺->英里。您将查找包含英尺和英里的表格条目。如果listbox1是Foot,Foot是上述列表中的第一项,则将listbox1.value*5280放入listbox2。或者,如果listbox1是Mile,Mile是转换列表中的第二项,则将listbox1.value*1/5280放入textbox2

因此,原始from单位在转换表中的位置决定了您是使用转换值还是使用其倒数


无论如何,我都会这样做

我建议使用本评论中描述的方法:


通过使用转换因子映射,这解决了在多次转换变量时可能遇到的数值不稳定性问题。

我已经对我的git hub配置文件进行了转换,您将很容易理解它 这里是链接

我想补充一点,所有计算都应该使用任意精度的有理数或十进制表示,而不是浮点IEEE或其他形式,以避免在表示和使用有限长度二进制表示时出现细微差异。虽然此链接可以回答这个问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效。