【微软技术栈】C#.NET 内置数值转换

本文内容

  1. 隐式数值转换
  2. 显式数值转换

C# 提供了一组整型和浮点数值类型。 任何两种数值类型之间都可以进行隐式或显式转换。 必须使用强制转换表达式来执行显式转换。

1、隐式数值转换

下表显示内置数值类型之间的预定义隐式转换:

From
sbyteshortintlongfloatdoubledecimal 或 nint
byteshortushortintuintlongulongfloatdoubledecimalnint 或 nuint
shortintlongfloatdoubledecimal 或 nint
ushortintuintlongulongfloatdoubledecimalnint 或 nuint
intlongfloatdoubledecimal 或 nint
uintlongulongfloatdoubledecimal 或 nuint
longfloatdouble 或 decimal
ulongfloatdouble 或 decimal
floatdouble
nintlongfloatdouble 或 decimal
nuintulongfloatdouble 或 decimal

从 intuintlongulongnint 或 nuint 到 float 的隐式转换以及从 longulongnint 或 nuint 到 double 的隐式转换可能会丢失精准率,但绝不会丢失一个数量级。 其他隐式数值转换不会丢失任何信息。

注意:

  • 任何整型数值类型都可以隐式转换为任何浮点数值类型。

  • 不存在针对 byte 和 sbyte 类型的隐式转换。 不存在从 double 和 decimal 类型的隐式转换。

  • decimal 类型和 float 或 double 类型之间不存在隐式转换。

  • 类型 int 的常量表达式的值(例如,由整数文本所表示的值)如果在目标类型的范围内,则可隐式转换为 sbytebyteshortushortuintulongnint 或 nuint

    byte a = 13;
    byte b = 300;  // CS0031: Constant value '300' cannot be converted to a 'byte'
    

    如前面的示例所示,如果该常量值不在目标类型的范围内,则发生编译器错误 CS0031。

2、显式数值转换

下表显示不存在隐式转换的内置数值类型之间的预定义显式转换:

From
sbytebyteushortuintulong 或 nuint
bytesbyte
shortsbytebyteushortuintulong 或 nuint
ushortsbytebyte 或 short
intsbytebyteshortushortuintulong 或 nuint
uintsbytebyteshortushortint 或 nint
longsbytebyteshortushortintuintulongnint 或 nuint
ulongsbytebyteshortushortintuintlongnint 或 nuint
floatsbytebyteshortushortintuintlongulongdecimalnint 或 nuint
doublesbytebyteshortushortintuintlongulongfloatdecimalnint 或 nuint
decimalsbytebyteshortushortintuintlongulongfloatdoublenint 或 nuint
nintsbytebyteshortushortintuintulong 或 nuint
nuintsbytebyteshortushortintuintlong 或 nint

显式数值转换可能会导致数据丢失或引发异常,通常为 OverflowException。

注意:

  • 将整数类型的值转换为另一个整数类型时,结果取决于溢出检查上下文。 在已检查的上下文中,如果源值在目标类型的范围内,则转换成功。 否则会引发 OverflowException。 在未检查的上下文中,转换始终成功,并按如下方式进行:

    • 如果源类型大于目标类型,则通过放弃其“额外”最高有效位来截断源值。 结果会被视为目标类型的值。

    • 如果源类型小于目标类型,则源值是符号扩展或零扩展,以使其与目标类型的大小相同。 如果源类型带符号,则是符号扩展;如果源类型是无符号的,则是零扩展。 结果会被视为目标类型的值。

    • 如果源类型与目标类型的大小相同,则源值将被视为目标类型的值。

  • 将 decimal 值转换为整型类型时,此值会向零舍入到最接近的整数值。 如果生成的整数值处于目标类型的范围之外,则会引发 OverflowException。

  • 将 double 或 float 值转换为整型类型时,此值会向零舍入到最接近的整数值。 如果生成的整数值处于目标类型范围之外,则结果会取决于溢出上下文。 在已检查的上下文中,引发 OverflowException;而在未检查的上下文中,结果是目标类型的未指定值。

  • 将 double 转换为 float 时,double 值舍入为最接近的 float 值。 如果 double 值太小或太大,无法匹配 float 类型,结果将为零或无穷大。

  • 将 float 或 double 转换为 decimal 时,源值转换为 decimal 表示形式,并并五入到第 28 位小数后最接近的数(如有必要)。 根据源值的值,可能出现以下结果之一:

    • 如果源值太小,无法表示为 decimal,结果则为零。

    • 如果源值为 NaN(非数值)、无穷大或太大而无法表示为 decimal,则引发 OverflowException。

  • 将 decimal 转换为 float 或 double 时,源值分别舍入为最接近的 float 或 double 值。

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

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

相关文章

Linux 信号

目录 1.什么是信号 2.信号的产生 处理信号的常见方式: 如何理解这些组合键是如何变成信号的? 信号发送本质​编辑 信号的种类 ​编辑 3.信号处理常见方式概览 4.产生信号 5.信号其他相关常见概念 ​编辑 6.捕捉信号 signal函数: …

【Go语言实战】(26) 分布式搜索引擎

Tangseng 基于Go语言的搜索引擎 github地址:https://github.com/CocaineCong/tangseng 详细介绍地址:https://cocainecong.github.io/tangseng 这两周我也抽空录成视频发到B站的~ 本来应该10月份就要发了,结果一鸽就鸽到现在hh…

Conditional GAN

Text-to-Image 对于根据文字生成图像的问题,传统的做法就是训练一个NN,然后输入一段文字,输出对应一个图片,输出图片与目标图片越接近越好。存在的问题就是,比如火车对应的图片有很多张,如果用传统的NN来训…

shell编脚本概述和变量解释

shell的基本概述和规范 shell面向的对象 面向过程语言 (开发的时候,需要一步一步的执行) 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理&#xff0…

澳洲猫罐头如何?我亲自喂养过的优质猫罐头分享

猫罐头要符合三点:营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点,才是品质上乘的猫罐头。 猫罐头的三个要素,一个都不能少。配方不均衡,营养就不足;原料不新鲜,生产出来的猫罐头就…

NX二次开发UF_CAM_ask_lower_limit_plane_data 函数介绍

文章作者:里海 来源网站:里海NX二次开发3000例专栏 UF_CAM_ask_lower_limit_plane_data Defined in: uf_cam_planes.h int UF_CAM_ask_lower_limit_plane_data(tag_t object_tag, double origin [ 3 ] , double normal [ 3 ] ) overview 概述 Query …

鸿蒙开发|鸿蒙系统项目开发前的准备工作

文章目录 鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站 鸿蒙项目开发的基本流程介绍 直接上图,简单易懂! 整个项目的开发通过4个模块进行:开发准备、开发应用、运行调试测试和发…

一道简单的无穷级数题目

求级数 ∑ n 1 ∞ n x n \sum _{n1} ^ {\infty} n x^n n1∑∞​nxn 解析: 设 s ∑ n 1 ∞ n x n s \sum _{n1} ^ {\infty} n x^n sn1∑∞​nxn s 1 ∑ n 1 ∞ n x n − 1 s_1 \sum _{n1} ^ {\infty} n x^{n-1} s1​n1∑∞​nxn−1 则 s s 1 x s s_1…

关于使用宝塔页面Nginx的一些注意事项:Nginx不生效情况,以及解决方案

判断Nginx是否正常运行 使用宝塔页面保存Nginx配置后,有的时候不生效,这就说明Nginx没有正常运行 可以通过以下几种方式排查 通过宝塔 如果能够打开负载状态,说明Nginx运行正常 如果打不开,说明肯定是配置文件或者什么导致ngi…

NameServer源码解析

1 模块入口代码的功能 本节介绍入口代码的功能,阅读源码的时候,很多人喜欢根据执行逻辑,先从入口代码看起。NameServer部分入口代码主要完成命令行参数解析,初始化Controller的功能。 1.1 入口函数 首先看一下NameServer的源码目…

代码随想录算法训练营第五十九天丨 单调栈02

503.下一个更大元素II 思路 做本题之前建议先做739. 每日温度 (opens new window)和 496.下一个更大元素 I (opens new window)。 这道题和739. 每日温度 (opens new window)也几乎如出一辙。 不过,本题要循环数组了。 关于单调栈的讲解我在题解739. 每日温度 …

Django学习日志06

模板层之过滤器 # 过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可 # 过滤器名称就是函数名 语法: {{ obj|filter__name:param }} 变量名字|过滤器名称:变量 模板层之标签 # {% if %}会对一个变量求值,如果…

el-table 对循环产生的空白列赋默认值

1. el-table 空白列赋值 对el-table中未传数据存在空白的列赋默认值0。使用el-table 提供的插槽 slot-scope&#xff1a;{{ row || ‘0’ }} 原数据&#xff1a; <el-table-column label"集镇" :propcity ><template slot-scope"{row}">{{…

milvus数据库搜索

一、向量相似度搜索 在Milvus中进行向量相似度搜索时&#xff0c;会计算查询向量和集合中具有指定相似性度量的向量之间的距离&#xff0c;并返回最相似的结果。通过指定一个布尔表达式来过滤标量字段或主键字段&#xff0c;您可以执行混合搜索。 1.加载集合 执行操作的前提是…

【Leetcode合集】13. 罗马数字转整数

13. 罗马数字转整数 13. 罗马数字转整数 代码仓库地址&#xff1a; https://github.com/slience-me/Leetcode 个人博客 &#xff1a;https://slienceme.xyz 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符…

Vue实现表单效验

第一步&#xff1a;首先给form表单绑定一个rules属性 和 ref属性 <el-form :model"addFroms" label-position"right" :rules"rules" ref"ruleFormRef" label-width"100px"></el-form> 第二步&#xff1a;获取表…

TCC简介

TCC TCC&#xff08;Try-Confirm/Cancel&#xff09;是一种分布式事务处理模型&#xff0c;旨在解决分布式系统中的事务一致性问题。 三阶段 Try阶段&#xff1a; 在这个阶段&#xff0c;业务参与者尝试执行事务&#xff0c;并执行相应的业务逻辑。该阶段用于检查事务执行的…

007 OpenCV霍夫变换

目录 一、环境 二、霍夫变换原理 三、代码 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、霍夫变换原理 OpenCV中的霍夫变换是一种用于检测图像中直线和圆的算法。它基于图像中像素的分布情况&#xff0c;通过统计像素点之间的…

2024年山东省职业院校技能大赛中职组“网络安全”赛项竞赛试题-C

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-C 一、竞赛时间 总计&#xff1a;360分钟 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A、B模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略设置 A-3 流量完整性保护 A-4 …