日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

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

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

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

摘要

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

基礎配置

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


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

實戰(zhàn)示例:天氣 API

基礎模型定義


public record WeatherForecast(

   Temperature Temperature,

   DateTime Date,

   string Summary

);



public record WeatherResponse(

   string DisplayValue,

   DateTime Date,

   string Summary

);

API 端點實現(xiàn)


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 =>

   {

       // 創(chuàng)建基礎溫度(攝氏度)

       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") //控制輸出的數(shù)字為兩位小數(shù)

   ));

})

.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}")

       };

   }

}

數(shù)學運算支持

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


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)}");

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

文化本地化支持


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

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

var oneKg = Mass.FromKilograms(1);

// ToString() 使用 CurrentCulture 進行縮寫語言和數(shù)字格式化。這與 .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 是一個強大而靈活的單位轉換庫,它不僅簡化了單位轉換的實現(xiàn),還提供了豐富的功能支持。通過使用 Units.NET,開發(fā)者可以專注于業(yè)務邏輯,而不必擔心單位轉換的復雜性。無論是構建天氣 API、物流系統(tǒng)還是科學計算應用,Units.NET 都是處理單位轉換的理想選擇。

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


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

主站蜘蛛池模板: 日本高清在线中字视频 | 忘忧草影院在线www韩国日本 | 爽妇网国产精品 | 韩国专区福利一区二区 | 亚洲人成电影在线小说网色 | 国产精品日本一区二区在线看 | 免费aⅴ在线视频 | 高清一级做a爱过程不卡视频 | 国产一级| 最近免费中文mv在线字幕 | 欧美校园激情清纯另类 | 久在线精品视频线观看 | 国产熟女熟女 | 国产人成综合精品亚洲 | 精品国产品国语在线不卡 | 男女午夜猛烈啪啦啦视频 | 在线播放亚洲精品 | 一色屋精品视频在线观看 | 噼里啪啦 | 国产精品+日韩精品+在 | 色老板久| 日本在线tv黄 | 国产日产成人免费视频 | 色午夜日本高清视频www | 日韩亚洲人成网站在线播放 | 大伊香蕉精品一区视频在线 | 日本中文字幕第 | 浮力影院亚洲国产第一页 | 文中字幕一区二区 | 亚洲欧美综合精品成 | 高清免费| 日本中文字幕在线视频一区 | 亚洲国产日韩a不卡线欧美 日韩a优精品在线观看 | 国色天香在线观看 | 香蕉伊蕉伊中文在线视频 | 国产在线观看国语对白 | 91精品手机国产在线观 | 男人操女人网站 | 全集追剧网 | 成人观看的视频三级 | 国产日韩欧美一区二区三区在线 |