【入門級】-[資料型別]-資料型別轉換

【入門級】-[資料型別]-資料型別轉換

更新於 發佈於 閱讀時間約 7 分鐘

當我們在撰寫程式過程中,有可能會遇到在做資料處理時與一開始宣告的資料型別不一樣,這時就會需要資料型別轉換了。那這邊有四種轉換介紹:

一、自動轉型

運算過程中在精確度不會改變時,程式就會自動幫我們做轉型處理,什麼意思呢?就是小範圍可以放入大範圍中,但大範圍無法放入小範圍去做運算。還是不懂?沒關係這邊用例子來說明:

正常處理:

double A = 120;
double B;
B = A + 3.45;
A = B * 2;
說明:
第一行:宣告倍精度浮點數A,且初始值為120
第二行:宣告倍精度浮點數B,無特別設定初始值
第三行:(1)B的值要看"="右邊的值,也就是120+3.45=123.45
    (2)得知B為123.45

第四行:(1)A的值要看"="右邊的值,也就是B*2
    (2)這個B值呢!是看最後的結果也就是123.45
    (3)因此B*2 = 123.45 * 2 = 246.9,得知A最後的值為246.9


遇到需要做轉換的狀況就會是:

int A = 120;
double B;
B = A + 3.45;
A = B * 2;
說明:
第一行:宣告整數A,且初始值為120
第二行:宣告倍精度浮點數B,無特別設定初始值
第三行:(1)運算結果是存到B,因此運算內容要與B的資料型別相同
    (2)由於B是double(倍精度浮點數),A是int(整數),int轉double是不會影響精確度的
    (3)因此A就會從int自動轉換為double型別後再做運算

第四行:(1)此時就不一樣了,運算結果是存到整數型別A
    (2)雖然運算內容”2”是整數沒問題,但B卻是倍精度浮點數
    (3)因此精確度是會被影響到,無論B的值是不是2.0000這樣的數值,電腦都會出現錯誤


只要「運算結果的資料型別」可以容納的下「運算內容的資料型別」範圍,電腦就可以暫時再那一行運算當中做自動轉換型態的動作。


二、明確轉型

有一個Type Cast的方法可以強行轉換資料型別,方法:

結果值 = (想要強迫轉換的型別)運算式 或 變數名稱;

這邊舉個例子:

int A;
double B = 3.14;
A = (int)B;

由於B是double而A是int,要將B的值給予A但型別不符,因此使用A的型別將B強制轉換為int,此時A的結果為3。

因為是強制轉換關係,因此會遺失小數點後面的值,所以在使用的時候要注意。


三、Parse方法

若遇到文字型別的數字,想要將它轉為數值時,就可以使用Parse()方法來轉換,方法:

數值變數 = 資料型別.Parse(文字型別的數字);

什麼是文字型別的數字?就是

string C = ”66”;

像這樣的形式就是文字型別的數字,string是字串型別可以加入文字的,但也會接收到有關數字的時候,倘若說字串中只有數字時想要轉為數值就可以使用Parse()方法若字串中有非數字時可能轉換時就會出現錯誤唷

用上面例子舉例就會是:

Int D = int.Parse(“66”);


四、轉換成字串

1.自動轉換

由於有時候在使用VC#時會用到工具箱的Label元件,那麼此時想要將一些數字轉成文字型態就可以這麼做:

string msg = ”今年是”;
int year = 2023;
Label.Text = msg + year;

那麼Label.Text會因為”+”號而將兩者做串接,輸出結果就為「今年是2023」這樣的字串,那麼year也會在這當中暫時自動轉換為字串型別。

2.明確轉換

有時候查詢日期時間或是其他內容的時候就需要去做轉換的動作,那麼有兩種可以明確轉換方法就是:

(1)字串變數 = Convert.ToString(要轉換的資料 或 變數名稱);
(2)字串變數 = 要轉換的資料 或 變數名稱 .ToString();

舉例:

int A = 2023
string B = Convert.ToString(2023);
string BB = Convert.ToString(A);
string C = 2023.ToString();
string CC = A.ToString();


筆記補充:日期時間的轉換

1.取得當下時間

DateTime dtNow= DateTime.Now;
string S= dtNow.ToString("yyyy-MM-dd HH:mm:ss");
DateTime dt=Convert.ToDateTime(S);
說明:
(1)第一行是取得當下時間
(2)第二行是將資料字串格式化
yyyy-MM-dd是年月日部分
HH:mm:ss是時分秒數的部分(這邊的HH是24小時制,改成hh就為12小時制了)
(3)第三行是將字串轉回日期格式


2.時間差計算

DateTime dt1= Convert.ToDateTime("2023-03-29 00:00:00");
DateTime dt2= Convert.ToDateTime("2023-03-30 00:00:00");
TimeSpan ts = dt2- dt1;

double dDateDiff = ts.TotalDays;
label1.Text = "日期相差 " + Convert.ToInt32(dDateDiff).ToString() + "天";

int iDateDiff = ts.Days;
label2.Text = "日期相差 " + iDateDiff.ToString() + "天";
說明:
1.第一、二行是取得兩個時間
2.第三行是做相差運算,得知時間差距
3.第四、五行是使用.TotalDays來做處理,但是TotalDays是double型別,因此會有小數問題,故在做顯示的時候會將運算後的值強制轉成32位元的整數型態
4.第六、七行是使用.Days來做處理,由於Days為int型別,因此不會有小數問題,可直接做顯示沒有問題的。

參考內容:
1.Visual C# 2017基礎必修課
2.C# Date() 日期與時間
3.C# Tips: TimeSpan 的 TotalDays

avatar-img
橙果杏的沙龍
23會員
43內容數
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言
avatar-img
留言分享你的想法!
橙果杏的沙龍 的其他內容
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
一、什麼是WinSocket? 也就是大家常說的WinSock全名為Windows Sockets API (WSA),它會透過TCP/IP通訊協定來做網路的通訊,會用在Windows操作系統上來開發網路應用的API(應用程式介面)   二、WinSocket用在哪裡?   Socket可以
當我們架好站、WebService測試完,接著就是測試區域網路連線啦~
前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它