欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#單位轉換實踐:深入解析 Units.NET

freeflydom
2025年1月7日 15:42 本文熱度 211

摘要

在現代軟件開發中,準確處理不同單位的轉換是一個常見而復雜的需求。無論是處理溫度、長度、重量還是其他物理量,都需要可靠的單位轉換機制。本文將深入介紹 Units.NET 庫,展示如何在 .NET 應用中優雅地處理單位轉換。

基礎配置

首先,通過 NuGet 安裝 Units.NET:


<PackageReference Include="UnitsNet" Version="5.x.x" />

實戰示例:天氣 API

基礎模型定義


public record WeatherForecast(

   Temperature Temperature,

   DateTime Date,

   string Summary

);



public record WeatherResponse(

   string DisplayValue,

   DateTime Date,

   string Summary

);

API 端點實現


var summaries = new[]

{

   "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"

};



app.MapGet("/weather", (string? unit) =>

{

   var forecasts = Enumerable.Range(1, 5).Select(index =>

   {

       // 創建基礎溫度(攝氏度)

       var tempC = Temperature.FromDegreesCelsius(Random.Shared.Next(-20, 55));

       // 根據請求的單位進行轉換

       var temp = unit?.ToLowerInvariant() switch

       {

           "f" or "fahrenheit" => tempC.ToUnit(TemperatureUnit.DegreeFahrenheit),

           "k" or "kelvin" => tempC.ToUnit(TemperatureUnit.Kelvin),

           _ => tempC

       };



       return new WeatherForecast(

           Temperature: temp,

           Date: DateTime.Now.AddDays(index),

           Summary: summaries[Random.Shared.Next(summaries.Length)]

       );

   })

   .ToArray();



   return forecasts.Select(f => new WeatherResponse(

       Date: f.Date,

       Summary: f.Summary,

       DisplayValue: f.Temperature.ToString("F2") //控制輸出的數字為兩位小數

   ));

})

.WithName("GetWeatherForecast");

當請求的units單位不同時,將輸出相同溫度的不同單位表示:



單位相互轉換


public static class UnitConverter

{

   public static Temperature ConvertTemperature(

       double value,

       string fromUnit,

       string toUnit)

   {

       var temperature = fromUnit.ToLowerInvariant() switch

       {

           "c" => Temperature.FromDegreesCelsius(value),

           "f" => Temperature.FromDegreesFahrenheit(value),

           "k" => Temperature.FromKelvins(value),

           _ => throw new ArgumentException($"Unsupported unit: {fromUnit}")

       };



       return toUnit.ToLowerInvariant() switch

       {

           "c" => temperature.ToUnit(TemperatureUnit.DegreeCelsius),

           "f" => temperature.ToUnit(TemperatureUnit.DegreeFahrenheit),

           "k" => temperature.ToUnit(TemperatureUnit.Kelvin),

           _ => throw new ArgumentException($"Unsupported unit: {toUnit}")

       };

   }

}

數學運算支持

Units.NET 支持各種數學運算,使得單位計算變得簡單:


public class UnitCalculations

{

       public static Speed CalculateSpeed(Length distance, Duration time)

       {

           return distance / time;

       }



       public static Acceleration CalculateAcceleration(Speed initialSpeed, Speed finalSpeed, Duration time)

       {

           return (finalSpeed - initialSpeed) / time;

       }



       public static Energy CalculateKineticEnergy(Mass mass, Speed velocity)

       {

           double massValue = mass.Kilograms;

           double velocityValue = velocity.MetersPerSecond;

           double energyValue = 0.5 * massValue * velocityValue * velocityValue;

           return Energy.FromJoules(energyValue);

       }

}



// 使用示例

var distance = Length.FromKilometers(100);

var time = Duration.FromHours(2);

var speed = UnitCalculations.CalculateSpeed(distance, time);

Console.WriteLine($"Speed: {speed.ToUnit(SpeedUnit.KilometerPerHour)}");

代碼執行后,控制臺將輸出:Speed: 50 km/h

文化本地化支持


var usEnglish = new CultureInfo("en-US");

var russian = new CultureInfo("ru-RU");

var oneKg = Mass.FromKilograms(1);

// ToString() 使用 CurrentCulture 進行縮寫語言和數字格式化。這與 .NET Framework 的行為一致,

// 因為 DateTime.ToString() 使用 CurrentCulture 處理整個字符串,可能是因為將英文日期格式與俄文月份名稱混合在一起可能會令人困惑。

CultureInfo.CurrentCulture = russian;

string kgRu = oneKg.ToString(); // "1 кг"



// 使用特定文化和自定義字符串格式模式的 ToString()

string mgUs = oneKg.ToUnit(MassUnit.Milligram).ToString(usEnglish); // "unit: mg, value: 1.00"

string mgRu = oneKg.ToUnit(MassUnit.Milligram).ToString(russian); // "unit: мг, value: 1,00"



Console.WriteLine(mgUs);

Console.WriteLine(mgRu);

// 從字符串解析測量值

Mass kg = Mass.Parse("1.0 kg", usEnglish);



// 從字符串解析單位,一個單位可以有多個縮寫

RotationalSpeedUnit rpm1 = RotationalSpeed.ParseUnit("rpm"); // RotationalSpeedUnit.RevolutionPerMinute

RotationalSpeedUnit rpm2 = RotationalSpeed.ParseUnit("r/min");  // RotationalSpeedUnit.RevolutionPerMinute



// 獲取單位的默認縮寫,如果在 Length.json 中為 Kilogram 單位定義了多個縮寫,則獲取第一個

string kgAbbreviation = Mass.GetAbbreviation(MassUnit.Kilogram); // "kg"

控制臺將輸出不同文化設置下的標準單位


1000000 mg

1000000 мг

結論

Units.NET 是一個強大而靈活的單位轉換庫,它不僅簡化了單位轉換的實現,還提供了豐富的功能支持。通過使用 Units.NET,開發者可以專注于業務邏輯,而不必擔心單位轉換的復雜性。無論是構建天氣 API、物流系統還是科學計算應用,Units.NET 都是處理單位轉換的理想選擇。

轉自https://www.cnblogs.com/madtom/p/18653522


該文章在 2025/1/7 15:42:57 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved