C# 單位換算套件 UnitsNet 使用示範,以溫度為例

每次遇到單位換算是不是頭很痛? 要上網查然後再寫一堆常數,例如 °C 到 °F 是 °C *9/5 + 32 ,既繁瑣又容易出錯。不過筆者最近找到了一個套件,專門用來做單位換算,光溫度(Temperature)就有 10 種,其他還有包含角度(Angle)、重量(Mass)、電流(ElectricCurrent)、體積(Volume)、功率(Power)、壓力(Pressure)、速度(Speed)、加速度(Acceleration)、能量(Energy)、電荷(ElectricCharge)...等,非常的實用,還有一堆筆者不知道的單位都在上面。

安裝

先使用 NuGet 安裝 UnitsNet 套件,或是使用 .NET CLI 執行以下指令安裝
	
dotnet add package UnitsNet
    

溫度換算

前面提到溫度就有 10 種,這裡就舉例華氏和攝氏溫度轉換:
    
Temperature temperature = Temperature.FromDegreesCelsius(28);
Console.WriteLine(temperature);  // 28 °C
Temperature f = temperature.ToUnit(TemperatureUnit.DegreeFahrenheit);
Console.WriteLine(f);  // 82.4 °F

Console.WriteLine(f.ToUnit(TemperatureUnit.DegreeCelsius));  // 28 °C
    

輸出內容為字串,包含 °C 或 °F 字樣。

溫度相加

Temperature 並不能直接相加,會出現下面的例外:
    
Cannot apply operator '+' to operands of type 'UnitsNet.Temperature' and 'UnitsNet.Temperature', candidates are:      UnitsNet.Temperature operator +(UnitsNet.Temperature, UnitsNet.TemperatureDelta) (in struct Temperature)      UnitsNet.Temperature operator +(UnitsNet.TemperatureDelta, UnitsNet.Temperature) (in struct Temperature)
    

要先轉換為溫度的增量才能相加,可以使用 TemperatureDelta.FromDegreesCelsius ,或是直接減去 0 (不能使用 +)
    
TemperatureDelta temp1AsDelta = TemperatureDelta.FromDegreesCelsius(20);
TemperatureDelta temp2AsDelta = Temperature.FromDegreesCelsius(10) - Temperature.FromDegreesCelsius(0);

TemperatureDelta temp3AsDelta = temp1AsDelta - temp2AsDelta;
Console.WriteLine(temp3AsDelta);  // 10 °C

Temperature temp = Temperature.FromDegreesCelsius(0) + temp3AsDelta;
Console.WriteLine(temp.ToUnit(TemperatureUnit.DegreeCelsius));  // 10 °C
    



參考資料:
Github - angularsen/UnitsNet

留言