UnitsNet 库简介

news/2025/3/4 3:54:40/文章来源:https://www.cnblogs.com/axzxs2001/p/18746159

  UnitsNet 是一个功能强大的 .NET 库,专为简化物理单位的处理而设计。它提供了丰富的单位类型及其转换功能,使开发人员能够在代码中方便地进行物理单位间的转换、计算和显示。UnitsNet 支持多种领域的物理单位,例如长度、质量、体积、温度、速度、面积等,极大地提高了开发效率和代码的可读性。无论是科学计算、工程项目,还是需要精确单位转换的应用程序开发,UnitsNet 都是一个理想的选择。

UnitsNet 支持的单位类型

以下表格展示了 UnitsNet 支持的主要物理单位类别及其部分示例:

类别示例单位
加速度 米每二次方秒, 英寸每二次方秒
角度 度, 弧度, 格拉迪安
面积 平方米, 平方公里, 英亩
密度 千克每立方米, 磅每立方英尺
电流 安培, 毫安
能量 焦耳, 卡路里, 千瓦时
牛顿, 磅力, 达因
频率 赫兹, 千赫兹, 兆赫兹
长度 米, 千米, 英里
质量 克, 千克, 磅
功率 瓦特, 千瓦特, 马力
压力 帕斯卡, 巴, 磅每平方英寸
速度 米每秒, 千米每小时, 英里每小时
温度 摄氏度, 华氏度, 开尔文
时间 秒, 分钟, 小时
体积 升, 毫升, 立方米

看一个简单的例子:

using System.Globalization;
using UnitsNet;var janpese = new CultureInfo("ja-JP");
var russian = new CultureInfo("ru-RU");
var chinese = new CultureInfo("zh-CN");
var oneKg = Mass.FromKilograms(1);Thread.CurrentThread.CurrentCulture = russian;
Console.WriteLine(oneKg.ToString());
Thread.CurrentThread.CurrentCulture = chinese;
Console.WriteLine(oneKg.ToString());

效果:

 中国和日本面积单位扩展示例

  UnitsNet 虽然涵盖了国际上广泛使用的单位,但并未包含一些地区性的单位。例如,中国的“亩”和日本的传统面积单位“坪(つぼ)”等。这时,我们可以通过扩展 UnitsNet 的方法来自定义这些单位,从而展示 UnitsNet 的易用性和扩展性。

  示例 1:中国面积单位扩展(亩)

  在中国,面积单位“亩”非常常见,特别是在农业领域。1 亩相当于 666.67 平方米。我们可以使用 UnitsNet 的扩展方法来支持这个单位:

using System;
using UnitsNet;public static class AreaExtensions
{private const double MuToSquareMeters = 666.67;// 扩展 Area 单位以支持“亩”public static double Mu(this Area area){return area.SquareMeters / MuToSquareMeters;}public static Area FromMu(double mu){return Area.FromSquareMeters(mu * MuToSquareMeters);}
}class Program
{static void Main(){Area area = Area.FromSquareMeters(1000);Console.WriteLine($"1000平方米等于 {area.Mu():0.00} 亩");Area areaFromMu = AreaExtensions.FromMu(1.5);Console.WriteLine($"1.5亩等于 {areaFromMu.SquareMeters:0.00} 平方米");}
}

  示例 2:日本面积单位扩展(坪、畳、町、反、合)

  日本传统上有一套独特的面积单位,例如“坪(つぼ)”常用于房屋面积的测量,1 坪等于 3.306 平方米;而“町(ちょう)”和“反(たん)”等则多用于农业或土地面积的测量。以下是使用 UnitsNet 扩展这些单位的示例代码:

using System;
using UnitsNet;public static class JapaneseAreaExtensions
{private const double SquareMetersPerTsubo = 3.306;private const double SquareMetersPerJo = 1.62;private const double SquareMetersPerCho = 9917;private const double SquareMetersPerTan = 991.7;private const double SquareMetersPerGo = 0.0331;// 坪 (Tsubo)public static double Tsubo(this Area area){return area.SquareMeters / SquareMetersPerTsubo;}public static Area FromTsubo(double tsubo){return Area.FromSquareMeters(tsubo * SquareMetersPerTsubo);}// 畳 (Jo)public static double Jo(this Area area){return area.SquareMeters / SquareMetersPerJo;}public static Area FromJo(double jo){return Area.FromSquareMeters(jo * SquareMetersPerJo);}// 町 (Cho)public static double Cho(this Area area){return area.SquareMeters / SquareMetersPerCho;}public static Area FromCho(double cho){return Area.FromSquareMeters(cho * SquareMetersPerCho);}// 反 (Tan)public static double Tan(this Area area){return area.SquareMeters / SquareMetersPerTan;}public static Area FromTan(double tan){return Area.FromSquareMeters(tan * SquareMetersPerTan);}// 合 (Go)public static double Go(this Area area){return area.SquareMeters / SquareMetersPerGo;}public static Area FromGo(double go){return Area.FromSquareMeters(go * SquareMetersPerGo);}
}class Program
{static void Main(){Area area = Area.FromSquareMeters(1000);Console.WriteLine($"1000平方米等于 {area.Tsubo():0.00} 坪");Console.WriteLine($"1000平方米等于 {area.Jo():0.00} 畳");Console.WriteLine($"1000平方米等于 {area.Cho():0.00} 町");Console.WriteLine($"1000平方米等于 {area.Tan():0.00} 反");Console.WriteLine($"1000平方米等于 {area.Go():0.00} 合");Area areaFromTsubo = JapaneseAreaExtensions.FromTsubo(1.5);Console.WriteLine($"1.5 坪等于 {areaFromTsubo.SquareMeters:0.00} 平方米");}
}

  在这个示例中,我们扩展了 UnitsNet 的 Area 类,使其可以处理日本的传统面积单位,如坪、畳、町等。这种扩展方法使我们可以更加灵活地使用 UnitsNet,以满足不同的单位需求。效果如下:

 总结

  UnitsNet 库不仅提供了多种国际标准单位的支持,还允许用户通过扩展轻松地添加定制单位。例如在中国和日本地区,特有的面积单位“亩”、“坪”等可以通过简单的扩展方法进行支持。这一特性不仅提升了 UnitsNet 的易用性,也让开发者在面对不同地区和场景时能够更高效、准确地进行单位转换和计算。因此,无论是需要精确单位换算的开发者,还是希望在科学计算和工程项目中提高开发效率的团队,UnitsNet 都是一个值得推荐的工具。

  文章来源微信公众号

  想要更快更方便的了解相关知识,可以关注微信公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/892224.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek避坑指南:巧用提示词

前言 DeepSeek是国内AI里面的佼佼者,它开源deepseek r1大模型,不仅把AI的使用成本降了下来,同时还撼动了open AI等国际玩家的市场地位。 由于DeepSeek R1是推理模型,在某些时候输出的内容答非所问、甚至会一本正经的胡说八道。今天我们主要聊聊如何能更好的让大模型回答问题…

.NET9里WinForm更新了什么

下面是几个在.NET9中WinForm的新功能!主题Windows Forms 已初步支持暗模式,目标是在 .NET 10 中实现完整支持。应用程序的颜色模式可以设置为以下几种值:SystemColorMode.Classic—(默认)浅色模式,与之前版本的 Windows Forms 相同。 SystemColorMode.System—遵循 Windo…

2019-PTA模拟赛-L1-3 后天(三目表达式-仅代码)

签到题,无解析Code: #include<iostream> using namespace std; int main(){int d;cin >> d;int res = (d + 2) % 7 == 0 ? 7 : (d + 2) % 7;cout << res;return 0; }

SemanticKernel系列,AI系列,SmartFill介绍视频系列

SemanticKernel系列 Semantic Kernel(SK)是微软开发的开源框架,旨在帮助开发者将大型语言模型(LLM)集成到应用程序中。它提供了丰富的工具和功能,支持多种编程语言,简化了LLM的调用和管理过程。通过SK,开发者可以更高效地构建智能应用,实现自然语言处理、对话生成等功…

Python|Windows 系统安装 triton 的方法

若未安装,则在运行调用了该仓库的 Python 脚本时,会报错如下:ModuleNotFoundError: No module named triton在 Windows 系统中,如果直接使用 pip 安装,会报错如下:pip install triton ERROR: Could not find a version that satisfies the requirement triton (from vers…

linux---常见命令

使用的是linux服务器,在这里整理一些linux常见的命令: 1、查看服务器端口命令sudo netstat -tuln打完收工!

国家 - 1

Mi propio escondite.今天说冰岛。 这是冰岛的轮廓:

Semantic Kernel:图片向量化

虽然本节与SK无关,但都是基于AI,所以暂且放在这个系统中Azure AI 视觉的多模式嵌入 API 可以将图像和文本转换为向量,也就是一种数字化的表示方式。这种技术可以让我们实现基于向量的图片搜索功能。通过结合这个 API 和 pgvector(PostgreSQL 中的向量库),我们可以让图片变…

miniconda创建虚拟环境后vscode使用conda时提示无法将“conda”项识别——附使用conda运行python项目简单教程

前提:miniconda已经加入到环境变量 vscode找到setting输入shell: windows改成cmd,重启vscode就好了 跑python项目需要对应的python版本和依赖包,使用anaconda管理python环境是个很好的选择,但是不需要跑深度学习大数据这种比较大的项目或者模型使用miniconda是个不错的选…

Semantic Kernel:SK中的Function

Semantic Kernel中的Functions被设计为可被动态调用的“插件”,用于处理某些特定的操作。例如,一个Function可以是用于获取天气信息的API请求,或者是用于计算复杂数学表达式的函数。在SK中,Functions通常分为以下两种类型:本地函数和语义函数。 Native Functions(本地函数…

寻觅Notepad2e

起因 这天,正当我兴致勃勃地编写新的博客时,想要打开windows的notepad,结果居然发现有个奇怪的东西,还占在最优匹配上,还好我看了一眼名字没有回车直接打开 我倒要看看是哪个国产流氓软件(注:刻板印象)给我偷偷装上的新notepad。哦,原来是TortoiseGit啊,误会国产软件…

【Flutter】 Getx动态路由管理方案

根组件配置应用入口配置:使用 GetMaterialApp 作为应用的根组件,它是 MaterialApp 的增强版本,提供了路由管理等额外功能。初始路由设置:通过 initialRoute 参数指定了应用启动时加载的初始页面为 Routes.homePage,这通常是一个字符串常量,定义在 routes.dart 文件中。路…