文号
t52970
阅读
4756
回复
5
收藏
4
关于长度单位换算  (内有代码)
2012/12/14
IP:四川
不是现在很多软件都有单位换算吗?就拿长度来说吧,比如每一个框填上你要换算的数字,然后选单位(米,千米,英里....等),然后再选择需要转成什么单位,所以还需要选择一次(还是 米,千米,英里....等),那好 比如你想算一下120米等于多少英寸,那你在每一个框填120,然后选择“米”,然后再选择需要转换成的“英寸” ,然后第二个框里就会显示出转换后的结果,实现起来简单还是复杂?

我的方案有两种
一、switch case实现 ,嵌套  通过第一个单位选择进入第一个switch,然后第二个单位选择进入第二个switch
二、用if else 类似上面的  if(第一个选择 && 第二个选择)

伪代码:
一、if else
  comboBox1.Items.Add("千米");  //初始化输入单位标签
            comboBox1.Items.Add("米");
            comboBox1.Items.Add("分米");

            comboBox2.Items.Add("千米");  //初始化输出单位标签
            comboBox2.Items.Add("米");
            comboBox2.Items.Add("分米");

            string I = comboBox1.Text;   //输入单位选择
            string O = comboBox2.Text;   //输出单位选择

            string Ix_ = textBox1.Text;   //输入数值
            string Ox_ = textBox2.Text;   //输出数值

            int Ix = 0;

            if (Ix_ != string.Empty)
                Ix = Int32.Parse(Ix_);

            if (I == "千米" && O == "米")
               Ox_ = (Ix * 1000).ToString();
            else if (I == "千米" && O == "分米")
                Ox_ = (Ix * 10000).ToString();
             ............
              textBox2.Text =  Ox_;
            ................
}

二、用switch case实现
comboBox1.Items.Add("千米");  //初始化输入单位标签
            comboBox1.Items.Add("米");
            comboBox1.Items.Add("分米");

            comboBox2.Items.Add("千米");  //初始化输出单位标签
            comboBox2.Items.Add("米");
            comboBox2.Items.Add("分米");

            string I = comboBox1.Text;   //输入单位选择
            string O = comboBox2.Text;   //输出单位选择

            string Ix_ = textBox1.Text;   //输入数值
            string Ox_ = textBox2.Text;   //输出数值

            int Ix = 0;

            if (Ix_ != string.Empty)
                Ix = Int32.Parse(Ix_);
            switch(I)
            {
                case "千米":
                    switch(O)
                    {
                        case "米": Ox_ = (Ix * 1000).ToString(); break;
                        case "分米": Ox_ = (Ix * 10000).ToString(); break;
                    }
                    break;
                case "米":
                    switch (O)
                    {
                        case "千米": Ox_ = (Ix * 0.001).ToString(); break;
                        case "分米": Ox_ = (Ix * 10).ToString(); break;
                    }
                    break;
                   //...............
            }
               textBox2.Text =  Ox_;
不晓得还有没有更好的方法?
14年0个月前IP:未同步
479040
1楼
这貌似不是现代程序设计领域里该考虑的问题啊。。。

你说的两种方案都可以,现在大多数语言的库里都有一种叫hashtable的实现,直接把名称存成Key,比率存成Value即可,当然,嵌入式领域另算
引用
评论
14年0个月前IP:未同步
479151
2楼
没学vb……
表示曾经想过其它的方法
先选择输入单位,然后输入数字
之后根据输入单位将输入的单位换成一个标准单位,例如输入cm先换成m,用一个变量保存
then
选择输出单位,再从标准单位换成所需单位
例如5cm换成dm
先将5cm换成0.05m
再换成0.5dm
在单位比较多的情况下应该比较简单……
引用
评论
tonghuamy作者
14年0个月前IP:未同步
479215
3楼
见笑了 ,其实我之前搞JAVA 惭愧啊!都没想到一楼说的hashTable(因为现在在弄C#,上面代码也是C#写的)。  还有二楼说的也不错,转正一个单位,所有的都用那个再转换。终于明白为什么有编程高手了,他们写的代码确实让人看不懂,简单的几句 能做很多事情
引用
评论
14年0个月前IP:未同步
482007
4楼
简单明了,学习了   高手众多啊
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的