我的问题是语言无关。我想写一个简单的单位转换程序。有转换类型,根据类型有单位。例如,如果我们将长度作为转换类型,那么将有Meter,Inch,Foot,Kilometer,Mile等。想象一下,有两个下拉框 - 一个方向来自,而另一个是方向。每个下拉框下方都有一个文本框。简单地说,当我在左侧选择英寸并在右侧选择英里并在任一文本框中键入任何数字时,我希望等效项出现在另一个文本框中。就像任何正常的单位转换app.Now我对此非常困惑。只是用if ... else写一个长代码,如果这样做的唯一方法呢?你会以什么方式跟随专业人士?
答案 0 :(得分:7)
使用一般计算单位,例如仪表。假设您使用米来计算所有内容,用户选择“英寸到英尺”。然后你必须计算第一个单位为米和米再次到英里。这样,您只需要为meter->单位实现缩放因子 x (您可以使用1 / x来完成米< -unit)。
因此,如果您有两个下拉框和一个转换列表meter-> toUnit(unit),它将单个仪表转换为第二个单位的相应值,那么您只需使用
userInput * 1/meter->toUnit(firstUnit) * meter->toUnit(secondUnit) = output
编辑:为确保数值稳定性,我建议您使用整数值和非常小的参考单位(例如毫米或甚至微米)。见评论。
答案 1 :(得分:1)
您可以创建一个包含单位名称和转换因子的列表。然后在两个下拉框中选择一个项目并使用转换因子进行计算,并在下面的文本框中显示名称。
当然,您需要为每种类型创建一个列表(例如温度,长度等)。
始终在内部使用SI单位。
答案 2 :(得分:1)
就预先选择第二个列表框的结果(仅长度,仅重量,仅体积等),您可以在每个下拉列表项上设置属性。类似“长度”,“重量”,“音量”等的东西。这样,当您在下拉列表中收到一个事件(“更改”,可能?)时,您隐藏了dropdown2中不具有相同内容的所有元素属性作为listbox1中的选定项目。
您可以设置逻辑表。类似的东西:
"Mile", "Foot", 5280
"Foot", "Inch", 12
"Meter", "Milimeter", 1000
...
然后,在下拉列表中选择项目后,您会找到包含这两种类型的列表条目。如果转换来自英寸 - >脚,那么结果的因子是12,反之则是1/12。
当用户点击“转换”时,您可以获取列表框中所选项目的值,并在逻辑表中找到它们。然后根据表的排列对textbox2进行计算。
例如,用户希望转换Foot - >英里。您将查找包含“Foot”和“Mile”的表条目。如果listbox1为“Foot”(并且“Foot”是上面列表中的第一项),则将listbox1.value * 5280
放入listbox2。或者,如果listbox1为“Mile”(并且“Mile”是转换列表中的第二项),则将listbox1.value * (1/5280)
放入textbox2。
因此,原始(“from”)单位在转换表中的位置决定了您是使用转化价值还是反转价值。
无论如何我就是这样做的;)
答案 3 :(得分:1)
我建议使用此评论中描述的方法:https://stackoverflow.com/a/17548353/12526166
通过使用转换因子映射,可以解决多次转换变量时可能遇到的数值不稳定问题。
答案 4 :(得分:0)
我已经在我的 git hub 配置文件中完成了,你会很容易理解它 这是链接 https://github.com/Anuj-malviya0/unit_converter