C#实现单位换算器
作者:Link2Points 发布时间:2022-04-20 07:25:55
标签:C#,单位,换算器
本文实例为大家分享了C#实现单位换算器的具体代码,供大家参考,具体内容如下
一、阐述
进制间转换:十六进制、十进制、八进制、二进制。
长度间转换:毫米、厘米、米、公里、英寸、英尺、码。
面积间转换:平方毫米、平方厘米、平方米、平方公里、平方英寸、平方英尺、平方码。
体积间转换:立方毫米、毫升、升、立方米、立方英寸、立方英尺、立方码。
二、效果
1. 进制转换
通过输入即可转换为另一个进制值。
2. 长度转换
用户输入进行单位换算,可从目标中选择需求单位。
选中需求后,输入框解除只读,输入即可进行换算。
3. 面积转换
同样,使用正则匹配对正数小数和正整数,而进制转换另外规则匹配。
4. 体积转换
当重选单位类型时会清空输入框。
代码
using System;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace UnitConversion
{
public partial class Form1 : Form
{
// 默认选项
private string unitItem = "进制";
// 用户选择单位度量 的 转换基数
private double customConversionBase = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
unitComboBox.Items.Add("进制");
unitComboBox.Items.Add("长度");
unitComboBox.Items.Add("面积");
unitComboBox.Items.Add("体积");
}
/*
* 进制转换
*/
private void BaseConversion(TextBox text, string val)
{
if (text == textBox1 && Regex.IsMatch(val, @"[0-1]+$")) //二进制转换
{
long oct = Convert.ToInt64(val, 2);
textBox2.Text = Convert.ToString(oct, 8);
textBox3.Text = oct.ToString();
textBox4.Text = Convert.ToString(oct, 16);
}
else if (text == textBox2 && Regex.IsMatch(val, @"[0-7]+$")) //八进制转换
{
long oct = Convert.ToInt64(val, 8);
textBox1.Text = Convert.ToString(oct, 2);
textBox3.Text = oct.ToString();
textBox4.Text = Convert.ToString(oct, 16);
}
else if (text == textBox3 && Regex.IsMatch(val, @"[0-9]+$")) //十进制转换
{
long oct = Convert.ToInt64(val);
textBox1.Text = Convert.ToString(oct, 2);
textBox2.Text = Convert.ToString(oct, 8);
textBox4.Text = Convert.ToString(oct, 16);
}
else if (text == textBox4 && Regex.IsMatch(val, @"[A-Fa-f0-9]+$")) //十六机制转换
{
long oct = Convert.ToInt64(val, 16);
textBox1.Text = Convert.ToString(oct, 2);
textBox2.Text = Convert.ToString(oct, 8);
textBox3.Text = oct.ToString();
}
}
/*
* 长度
*/
private void lengthConversion(TextBox text, string val)
{
if (text == textBox1)
{
double mm = Convert.ToDouble(val);
textBox2.Text = Convert.ToString(mm * 0.1);
textBox3.Text = Convert.ToString(mm * 0.001);
textBox4.Text = Convert.ToString(mm * 0.000_001);
textBox5.Text = Convert.ToString(mm * customConversionBase);
}
else if (text == textBox2)
{
double cm = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(cm * 10);
textBox3.Text = Convert.ToString(cm * 0.01);
textBox4.Text = Convert.ToString(cm * 0.000_01);
textBox5.Text = Convert.ToString(cm * customConversionBase * 10);
}
else if (text == textBox3)
{
double m = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(m * 1000);
textBox2.Text = Convert.ToString(m * 100);
textBox4.Text = Convert.ToString(m * 0.001);
textBox5.Text = Convert.ToString(m * customConversionBase * 1000);
}
else if (text == textBox4)
{
double km = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(km * 1000_000);
textBox2.Text = Convert.ToString(km * 100_000);
textBox3.Text = Convert.ToString(km * 1000);
textBox5.Text = Convert.ToString(km * customConversionBase * 1000_000);
}
else if (text == textBox5)
{
double en = Convert.ToDouble(val);
textBox1.Text = (en / customConversionBase).ToString();
}
}
/*
* 面积
*/
private void areaConversion(TextBox text, string val)
{
if (text == textBox1)
{
double mm = Convert.ToDouble(val);
textBox2.Text = Convert.ToString(mm * 0.01);
textBox3.Text = Convert.ToString(mm * 0.000_001);
textBox4.Text = Convert.ToString(mm * 0.000_000_000_001);
textBox5.Text = Convert.ToString(mm * customConversionBase);
}
else if (text == textBox2)
{
double cm = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(cm * 100);
textBox3.Text = Convert.ToString(cm * 0.000_1);
textBox4.Text = Convert.ToString(cm * 0.000_000_000_1);
textBox5.Text = Convert.ToString(cm * customConversionBase * 100);
}
else if (text == textBox3)
{
double m = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(m * 1_000_000);
textBox2.Text = Convert.ToString(m * 10_000);
textBox4.Text = Convert.ToString(m * 0.000_001);
textBox5.Text = Convert.ToString(m * customConversionBase * 1_000_000);
}
else if (text == textBox4)
{
double km = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(km * 1000_000_000_000);
textBox2.Text = Convert.ToString(km * 10_000_000_000);
textBox3.Text = Convert.ToString(km * 1000_000);
textBox5.Text = Convert.ToString(km * customConversionBase * 1000_000_000_000);
}
else if (text == textBox5)
{
double en = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(en / customConversionBase);
}
}
/*
* 体积
*/
private void volumeConversion(TextBox text, string val)
{
if (text == textBox1)
{
double cm = Convert.ToDouble(val);
textBox2.Text = Convert.ToString(cm);
textBox3.Text = Convert.ToString(cm * 0.001);
textBox4.Text = Convert.ToString(cm * 0.000_001);
textBox5.Text = Convert.ToString(cm * customConversionBase);
}
else if (text == textBox2)
{
double mL = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(mL);
textBox3.Text = Convert.ToString(mL * 0.001);
textBox4.Text = Convert.ToString(mL * 0.000_001);
textBox5.Text = Convert.ToString(mL * customConversionBase);
}
else if (text == textBox3)
{
double L = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(L * 1000);
textBox2.Text = Convert.ToString(L * 1000);
textBox4.Text = Convert.ToString(L * 0.001);
textBox5.Text = Convert.ToString(L * customConversionBase * 1000);
}
else if (text == textBox4)
{
double m = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(m * 1000_000);
textBox2.Text = Convert.ToString(m * 1000_000);
textBox3.Text = Convert.ToString(m * 1000);
textBox5.Text = Convert.ToString(m * customConversionBase * 1000_000);
}
else if (text == textBox5)
{
double en = Convert.ToDouble(val);
textBox1.Text = Convert.ToString(en / customConversionBase);
}
}
/*
* 输入换算
*/
private void textBox_TextChanged(object sender, EventArgs e)
{
try
{
TextBox text = (TextBox) sender;
string val = text.Text;
// 不为空 及 正整数或正小数 (进制另外进一步匹配)
if (text.Text == "")
{
return;
}
if (unitItem == "进制")
{
BaseConversion(text, val);
}
else if (Regex.IsMatch(val, @"(^[0-9]{1,}$)|(^[0-9]+(.[0-9]{1,})$)"))
{
switch (unitItem)
{
case "长度":
lengthConversion(text, val);
break;
case "面积":
areaConversion(text, val);
break;
case "体积":
volumeConversion(text, val);
break;
}
}
}
catch (Exception exception) {}
}
/*
* 单位类型选择
*/
private void unitComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
// 清空 及 复位
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox5.ReadOnly = true;
label5.Text = "";
customConversionBase = 0;
unitListBox.Items.Clear();
unitItem = unitComboBox.SelectedItem.ToString();
switch (unitItem)
{
case "进制":
label1.Text = "Bin";
label2.Text = "Oct";
label3.Text = "Dec";
label4.Text = "Hex";
break;
case "长度":
label1.Text = "mm";
label2.Text = "cm";
label3.Text = "m";
label4.Text = "km";
unitListBox.Items.Add("inch");
unitListBox.Items.Add("foot");
unitListBox.Items.Add("yard");
break;
case "面积":
label1.Text = "m²";
label2.Text = "cm²";
label3.Text = "m²";
label4.Text = "km²";
unitListBox.Items.Add("inch²");
unitListBox.Items.Add("foot²");
unitListBox.Items.Add("yard²");
break;
case "体积":
label1.Text = "cm³";
label2.Text = "mL";
label3.Text = "L";
label4.Text = "m³";
unitListBox.Items.Add("inch³");
unitListBox.Items.Add("foot³");
unitListBox.Items.Add("yard³");
break;
}
}
/*
* 单位度量选择
*/
private void unitListBox_SelectedIndexChanged_1(object sender, EventArgs e)
{
textBox5.ReadOnly = false;
if (unitListBox.SelectedItem != null)
{
label5.Text = unitListBox.SelectedItem.ToString();
switch (label5.Text)
{
case "inch":
customConversionBase = 0.039_37;
break;
case "foot":
customConversionBase = 0.003_281;
break;
case "yard":
customConversionBase = 0.001_094;
break;
case "inch²":
customConversionBase = 0.001_55;
break;
case "foot²":
customConversionBase = 0.000_011;
break;
case "yard²":
customConversionBase = 0.000_001;
break;
case "inch³":
customConversionBase = 0.061_024;
break;
case "foot³":
customConversionBase = 0.000_035;
break;
case "yard³":
customConversionBase = 0.000_001;
break;
}
}
}
}
}
来源:https://blog.csdn.net/Link2Points/article/details/118691379


猜你喜欢
- Android Studio卡很久(loading)的问题关于Android Studio卡在某个地方很久(更准确说应该是Loading很久
- Android仿通话来电界面,供大家参考,具体内容如下简介:开发中需要模拟来电时的通话界面,仿照来电界面实现来电时播放铃声,界面通过动画模拟
- 我就废话不多说啦,还是直接看代码吧!/** * 设置数据库是否自动提交事务 * @param flag
- 实现目标通过C#实现电脑的注销、关机、重启功能知识点本案例涉及的知识点包含:Process、Shell32.dll、User32.dll、S
- JMM与问题引入为啥先说JMM,因为CAS的实现类中维护的变量都被volatile修饰, 这个volatile 是遵循JMM规范(不是百分百
- 哎,最近很好久没写点东西了,由于工作的原因,接触公司自己研发的底层orm框架,偶然发现该框架在调用jdbc操作的时候参考的是hibernat
- MyBatis注解实现动态SQL在 Mybatis 中,使用注解可以很方便的进行sql操作,但很多动态 SQL 都是由 xml 配置实现的。
- 昨天有个刚学java的师弟发了个程序给我,说死活编译不过,老是报编码问题,自己试了一下,也出问题了...当我们编辑了一个Java源文件保存时
- 在java中我们常常使用加锁机制来确保线程安全,但是如果过度使用加锁,则可能导致锁顺序死锁。同样,我们使用线程池和信号量来限制对资源的使用,
- Java 线程同步根本上是要符合一个逻辑:加锁------>修改------>释放锁1、同步代码块示例如下:public cla
- FeignClient脱离eureka自定义URL需求Spring Cloud环境中的FeignClient有时候需要调用特定主机的接口,但
- 本文实例为大家分享了java模拟实现电话本系统的具体代码,供大家参考,具体内容如下java 模拟 电话本系统 (基础版)需求:注意的是,联系
- 无聊逛论坛,发现了这张图真是厉害啊,这排序, 既有多线程,又有排序,还有lambda表达式,但是这是C#版本,作为一个入坑的Java爱好者,
- MainApplication类文件的位置搭建 SpringBoot 项目时有一个主程序入口类.这个 MainApp 类必须在放在整个项目的
- 开窗函数能在每行的最后一行都显示聚合函数的结果,所以聚合函数可以用作开窗函数聚合函数和开窗函数聚合函数是将多行变成一行,如果要显示其他列,必
- 在request中可以获取到来自Http请求的body数据比如获取json格式数据代码:import com.alibaba.dubbo.c
- 本文实例为大家分享了Spring实现默认标签解析流程的具体代码,供大家参考,具体内容如下承接上文,进入parseBeanDefinition
- 1.使用usb口输入的扫描枪,这里实现使用了winform首先创建一个CS文件using System;using System.Colle
- Java中线程分为两种类型:用户线程和守护(服务)线程。通过Thread.setDaemon(false)设置为用户线程;通过Thread.
- 本文研究的主要是Java编程Nashorn的相关内容,具体如下。Nashorn是什么Nashorn,发音“nass-horn”,是德国二战时