C#實(shí)現(xiàn)單位換算器
本文實(shí)例為大家分享了C#實(shí)現(xiàn)單位換算器的具體代碼,供大家參考,具體內(nèi)容如下
一、闡述
進(jìn)制間轉(zhuǎn)換:十六進(jìn)制、十進(jìn)制、八進(jìn)制、二進(jìn)制。
長(zhǎng)度間轉(zhuǎn)換:毫米、厘米、米、公里、英寸、英尺、碼。
面積間轉(zhuǎn)換:平方毫米、平方厘米、平方米、平方公里、平方英寸、平方英尺、平方碼。
體積間轉(zhuǎn)換:立方毫米、毫升、升、立方米、立方英寸、立方英尺、立方碼。
二、效果
1. 進(jìn)制轉(zhuǎn)換
通過(guò)輸入即可轉(zhuǎn)換為另一個(gè)進(jìn)制值。
2. 長(zhǎng)度轉(zhuǎn)換
用戶(hù)輸入進(jìn)行單位換算,可從目標(biāo)中選擇需求單位。
選中需求后,輸入框解除只讀,輸入即可進(jìn)行換算。
3. 面積轉(zhuǎn)換
同樣,使用正則匹配對(duì)正數(shù)小數(shù)和正整數(shù),而進(jìn)制轉(zhuǎn)換另外規(guī)則匹配。
4. 體積轉(zhuǎn)換
當(dāng)重選單位類(lèi)型時(shí)會(huì)清空輸入框。
代碼
using System; using System.Text.RegularExpressions; using System.Windows.Forms; namespace UnitConversion { ? public partial class Form1 : Form ? { ? ? // 默認(rèn)選項(xiàng) ? ? private string unitItem = "進(jìn)制"; ? ? // 用戶(hù)選擇單位度量 的 轉(zhuǎn)換基數(shù) ? ? private double customConversionBase = 0; ? ? public Form1() ? ? { ? ? ? InitializeComponent(); ? ? } ? ? private void Form1_Load(object sender, EventArgs e) ? ? { ? ? ? unitComboBox.Items.Add("進(jìn)制"); ? ? ? unitComboBox.Items.Add("長(zhǎng)度"); ? ? ? unitComboBox.Items.Add("面積"); ? ? ? unitComboBox.Items.Add("體積"); ? ? } ? ? /* ? ? ?* 進(jìn)制轉(zhuǎn)換 ? ? ?*/ ? ? private void BaseConversion(TextBox text, string val) ? ? { ? ? ? if (text == textBox1 && Regex.IsMatch(val, @"[0-1]+$")) ? ? ? ? ? ? ? ?//二進(jìn)制轉(zhuǎn)換 ? ? ? { ? ? ? ? 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]+$")) ? ? ? ? ?//八進(jìn)制轉(zhuǎn)換 ? ? ? { ? ? ? ? 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]+$")) ? ? ? ? //十進(jìn)制轉(zhuǎn)換 ? ? ? { ? ? ? ? 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]+$")) ?//十六機(jī)制轉(zhuǎn)換 ? ? ? { ? ? ? ? long oct = Convert.ToInt64(val, 16); ? ? ? ? textBox1.Text = Convert.ToString(oct, 2); ? ? ? ? textBox2.Text = Convert.ToString(oct, 8); ? ? ? ? textBox3.Text = oct.ToString(); ? ? ? } ? ? } ? ? /* ? ? ?* 長(zhǎng)度 ? ? ?*/ ? ? 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; ? ? ? ? // 不為空 及 正整數(shù)或正小數(shù) ?(進(jìn)制另外進(jìn)一步匹配) ? ? ? ? if (text.Text == "") ? ? ? ? { ? ? ? ? ? return; ? ? ? ? } ? ? ? ? if (unitItem == "進(jìn)制") ? ? ? ? { ? ? ? ? ? BaseConversion(text, val); ? ? ? ? } ? ? ? ? else if (Regex.IsMatch(val, @"(^[0-9]{1,}$)|(^[0-9]+(.[0-9]{1,})$)")) ? ? ? ? { ? ? ? ? ? switch (unitItem) ? ? ? ? ? { ? ? ? ? ? ? case "長(zhǎng)度": ? ? ? ? ? ? ? lengthConversion(text, val); ? ? ? ? ? ? ? break; ? ? ? ? ? ? case "面積": ? ? ? ? ? ? ? areaConversion(text, val); ? ? ? ? ? ? ? break; ? ? ? ? ? ? case "體積": ? ? ? ? ? ? ? volumeConversion(text, val); ? ? ? ? ? ? ? break; ? ? ? ? ? } ? ? ? ? } ? ? ? } ? ? ? catch (Exception exception) {} ? ? } ? ? /* ? ? ?* 單位類(lèi)型選擇 ? ? ?*/ ? ? private void unitComboBox_SelectedIndexChanged(object sender, EventArgs e) ? ? { ? ? ? // 清空 及 復(fù)位 ? ? ? 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 "進(jìn)制":? ? ? ? ? ? label1.Text = "Bin"; ? ? ? ? ? label2.Text = "Oct"; ? ? ? ? ? label3.Text = "Dec"; ? ? ? ? ? label4.Text = "Hex"; ? ? ? ? ? break; ? ? ? ? case "長(zhǎng)度": ? ? ? ? ? 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 = "m2"; ? ? ? ? ? label2.Text = "cm2"; ? ? ? ? ? label3.Text = "m2"; ? ? ? ? ? label4.Text = "km2"; ? ? ? ? ? unitListBox.Items.Add("inch2"); ? ? ? ? ? unitListBox.Items.Add("foot2"); ? ? ? ? ? unitListBox.Items.Add("yard2"); ? ? ? ? ? break; ? ? ? ? case "體積": ? ? ? ? ? label1.Text = "cm3"; ? ? ? ? ? label2.Text = "mL"; ? ? ? ? ? label3.Text = "L"; ? ? ? ? ? label4.Text = "m3"; ? ? ? ? ? unitListBox.Items.Add("inch3"); ? ? ? ? ? unitListBox.Items.Add("foot3"); ? ? ? ? ? unitListBox.Items.Add("yard3"); ? ? ? ? ? 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 "inch2": ? ? ? ? ? ? customConversionBase = 0.001_55; ? ? ? ? ? ? break; ? ? ? ? ? case "foot2": ? ? ? ? ? ? customConversionBase = 0.000_011; ? ? ? ? ? ? break; ? ? ? ? ? case "yard2": ? ? ? ? ? ? customConversionBase = 0.000_001; ? ? ? ? ? ? break; ? ? ? ? ? case "inch3": ? ? ? ? ? ? customConversionBase = 0.061_024; ? ? ? ? ? ? break; ? ? ? ? ? case "foot3": ? ? ? ? ? ? customConversionBase = 0.000_035; ? ? ? ? ? ? break; ? ? ? ? ? case "yard3": ? ? ? ? ? ? customConversionBase = 0.000_001; ? ? ? ? ? ? break; ? ? ? ? } ? ? ? } ? ? } ? } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于finalize機(jī)制和引用、引用隊(duì)列的用法詳解
下面小編就為大家?guī)?lái)一篇關(guān)于finalize機(jī)制和引用、引用隊(duì)列的用法詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09C#零基礎(chǔ)開(kāi)發(fā)中最重要的概念總結(jié)
這篇文章主要為大家詳細(xì)介紹了C#零基礎(chǔ)開(kāi)發(fā)中最重要的一些概念,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,需要的可以參考一下2023-02-02C#使用位域技術(shù)進(jìn)行對(duì)象二進(jìn)制序列化優(yōu)
在操作系統(tǒng)中,進(jìn)程信息對(duì)于系統(tǒng)監(jiān)控和性能分析至關(guān)重要,這個(gè)過(guò)程中,如何將捕獲到的進(jìn)程對(duì)象轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),并進(jìn)行優(yōu)化,以減小數(shù)據(jù)包的大小,成為了一個(gè)關(guān)鍵問(wèn)題,下面我們就來(lái)看看如何使用位域技術(shù)對(duì)C#對(duì)象進(jìn)行二進(jìn)制序列化優(yōu)化吧2024-01-01C#使用BitConverter與BitArray類(lèi)進(jìn)行預(yù)定義基礎(chǔ)類(lèi)型轉(zhuǎn)換
這篇文章介紹了C#使用BitConverter與BitArray類(lèi)進(jìn)行預(yù)定義基礎(chǔ)類(lèi)型轉(zhuǎn)換的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法(Unity3D可用)
Lua是一種很好的擴(kuò)展性語(yǔ)言,Lua解釋器被設(shè)計(jì)成一個(gè)很容易嵌入到宿主程序的庫(kù),下面這篇文章主要給大家介紹了關(guān)于原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法,Unity3D可用的相關(guān)資料,需要的朋友可以參考下2022-04-04C#實(shí)現(xiàn)基于加減按鈕形式控制系統(tǒng)音量及靜音的方法
這篇文章主要介紹了C#實(shí)現(xiàn)基于加減按鈕形式控制系統(tǒng)音量及靜音的方法,涉及C#引用user32.dll動(dòng)態(tài)鏈接庫(kù)操作系統(tǒng)音量的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10c# 在windows服務(wù)中 使用定時(shí)器實(shí)例代碼
這篇文章主要介紹了c# 在windows服務(wù)中 使用定時(shí)器實(shí)例代碼,有需要的朋友可以參考一下2013-12-12