C# 中的数字分隔符 _

编写 C# 代码时,我们时常会用到很大的数字,例如下面定义的变量:

const long loops = 50000000000;

您能快速读出这是多少吗?是不是还是会有很多人把光标定位到最后一位,然后按键盘上的向左键一个一个往上数:个、十、百、千、万、十万、百万、千万、亿、十亿、百亿、千亿……

数字的这种写法,严重影响了它的可读性。所以人们才会发明了诸如千分位之类的写法,上面的数字用千分位可以写作 50,000,000,000,这样子是不是可读性就强多了?不过这是西方人的写法。
如果按照我们中国人的习惯,可以写成 500,0000,0000,是不是一眼就可以读出来是五百亿了?

那么问题来了,我们能不能在代码中这么写来增强数字的可读性呢?
答案是肯定的,不过要稍作改变 —— 把逗号换成下划线 _

const long loops = 500_0000_0000;
// 或者
const long loops = 50_000_000_000;

这是从 C# 7.0 开始支持的功能。它的用法和 Java 及 Python 中的用法是类似的。

当我们使用下划线 _ 作为数字分隔符时,可以把它添加在数字文本中除了第一个字符和最后一个字符之外的任何位置。将下划线添加到长数字的不同的位置,就形成了不同的分组,不同的分组在不同的情景中可能会有不同的意义。比如我们在使用十进制、十六进制或二进制记数法声明数字时,可以加上下划线 _ 字符,使数字更易读懂。

我们来举个例子,定义下面一组数字:

int bin = 0b1001_1010_0001_0100;// 二进制表示
int hex1 = 0x64_95_ED;          // 十六进制表示
int hex2 = 0x_64_95_ED;         // 十六进制表示
int dec1 = 1_000_000;           // 十进制
int dec2 = 100_0000;            // 十进制
int weird = 1_2__3___4____5_____6______7_______8________9;
double real = 1_000.111_1e-5;
decimal d = 1_222_345;

上面的这些数字声明编译之后实际运行的代码是:

int bin = 39444;
int hex1 = 6591981;
int hex2 = 6591981;
int dec1 = 1000000;
int dec2 = 1000000;
int weird = 123456789;
double real = 0.010001111;
decimal d = 1222345m;

可以看出,虽然表示结果一样,但是适当地添加了下划线分隔符的写法,大大增加了我们读数的容易程度。

C# 中的任意数字都可以使用下划线分隔,两个连续数字字符之间允许出现多个下划线。 但是有些时候是要注意的,比如在小数和指数中使用时,不能出现在小数点(10_.0)的前后、指数字符(1.1e_1)的前后和类型说明符(10_f)的前面,等等……

我们来看一些错误的用例,下面的用法都是错误的:

double d1 = 1.1_e1;     //不能出现在指数字符前后
float f1 = 10_f;        //不能出现在类型说明符前面
double d2 = 10_.0;      //不能出现在小数点前后
float pi1 = 3_.1415F;   //不能出现在小数点前后
float pi2 = 3._1415F;   //不能出现在小数点前后
int x1 = 52_;           //不能出现在第一个字符和最后一个字符
int x2 = 0x52_;         //不能出现在第一个字符和最后一个字符
int x3 = 0_x52;         //不能出现在 0x 之间

总结

在定义较大的数字时,使用下划线 _ 作为分隔符,可以让较长的数字更具可读性。这个功能虽然很微不足道,但当你用到它的时候,易读性会让你的心情愉快很多,不是吗?

下划线分隔符 _ 在语义上对运行没有任何影响,因为它在编译的时候就被编译器忽略了。

作者 :技术译民
出品 :技术译站(https://ITTranslator.cn/)

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

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

相关文章

数字调制系统工作原理_空间光调制器工作原理是什么 空间光调制器工作原理...

空间光调制器(SLM), 空间光调制器(SLM)工作原理是什么?实时空间光调制器使得相干处理系统能输入非相干光图像和随时间变化的图像的器件。相干光处理系统的最大优点是二维平行处理、信息容量大,运算速度快。但是目前的输入图像和空间滤波都用银盐胶片作记录媒质&…

使用 .NET 5 体验大数据和机器学习

2020 中国.NET 开发者峰会正式启动 ,欢迎大家提交演讲主题或者购买超级早鸟票。翻译:精致码农-王亮原文:http://dwz.win/XnM.NET 5 旨在提供统一的运行时和框架,使其在各平台都有统一的运行时行为和开发体验。微软发布了与 .NET 协…

linux监控目录容量,利用ZABBIX监控某个目录大小

近期,因为JMS的消息堆积导致ApacheMQ频率故障(消息没有被消费掉,导致其数据库达到1.2G,JMS此时直接挂掉),很是郁闷!刚好自己在研究zabbix.既然zabbix如此强大,那么它可以监控我的这个目录大小吗&#xff1f…

三菱plc选型手册_模拟量是什么?PLC和模拟量是如何转换的?

模拟量在PLC系统中有着非常广泛的应用,特别是在过程控制系统中。模拟量是一种连续变化的量,因此,它的使用对象也是各种连续变化的量,比如温度,压力,湿度,流量,转速,电流&…

windows和linux命令行一样吗,微软改进Windows命令行 目的是和Linux命令行相抗衡

微软官方人员承认微软正在对Windows命令行环境或是Windows终端进行全方位的改进,目的是能和Linux命令行相竞争。随着Linux云服务器的大量被采用,很多Linux云服务器都没有安装图形界面,只使用终端能够大幅度提高运行速度,微软想通过…

vue 离开页面事件_【必看】58 道 Vue 常见面试题集锦,涵盖入门到精通,自测 Vue 掌握程度...

△ 是新朋友吗?记得先点web前端学习圈关注我哦~1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 kb ;简单易学:国人开发,中文文…

购票啦 | 2020中国.NET开发者峰会启动

.NET Conf China 2020去年2019年在上海举行了第一届的中国.NET开发者峰会,今年2020年即将在苏州举行第二届,有兴趣的童鞋们,不要忘记购票参加哈。 1大会背景介绍2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路…

w7下如何安装linux双系统,ubuntu安装教程(下): 教你装win7+Ubuntu双系统

今天突发的想装个双系统玩玩,原来我ubuntu和win8都是装在虚拟机里面的,感觉用起来很不方便,而且感觉用起来特别不流畅,所以就想装个win7ubuntu的双系统。原来是想把ubuntu直接wubi安装在win7里面。但是这样的话,会带来…

vscode代码运行时间工具_10款实用的VSCode插件提升你的编辑体验 | 第98期

代码编辑器或者文本编辑器相信大家都不会陌生,但是,常用Windows的朋友大概都知道其自带的“文本编辑器”那是一款多么难用的软件。后来又有一系列的编辑器,比如notepad、sublime、atom等等,包括Linux用户喜欢的vim,这些…

简单理解线程同步上下文

为了线程安全,winform和wpf框架中规定只能使用UI线程操作控件,从其它线程上操作控件就会报跨线程异常。假如有这样一个场景:点击按纽,然后开始计算员工薪资,并将计算信息实时展示在一个文本框中,由于计算过…

修改手机屏幕刷新率_手机屏幕没有高刷新率算不上旗舰机?看看网友都是如何回答的...

近日Redmi K30 Pro的各种参数信息逐渐曝光,高通骁龙865处理器、LPDDR5内存、UFS3.1闪存、VC液冷散热、前置弹出式摄像头、多彩呼吸灯、Z轴线性马达等等参数都备受好评。唯独在提及屏幕时,60Hz的刷新率就让网友们不满意了。此前在K30的发布会上&#xff0…

持续交付二:为什么需要多个环境

关于开发测试生产需要多少个环境,因公司而异,这里分享一下我建议开发过程中使用的几个环境。Development环境,就是开发环境,程序写代码,写单元测试的环境,一般和IDE一起,经常是在调试模式下进行…

git revert 后再次merge_git如何回滚错误合并的分支

导读:分类:技术干货题目:git如何回滚错误合并的分支合并到线上分支出现问题的修复方式。场景线上分支:master你开发的分支:dev1同时开发的分支:dev2dev1分支开发的代码已经上线,并且已经merge到…

linux+c+逐行读文件内容,使用C ++中的ifstream逐行读取文件

在C 中逐行读取文件可以通过某些不同的方式完成。[快]循环使用std :: getline()最简单的方法是使用std :: getline()调用打开std :: ifstream和循环。 代码简洁易懂。#include std::ifstream file(FILENAME);if (file.is_open()) {std::string line;while (getline(file, line)…

如何区分netty是udp还是tcp_鲜奶粉还是大包粉,到底该如何区分?

100%的宝爸宝妈们都希望为宝宝挑选最营养、最新鲜的口粮,也相信让娃爸每周逛遍各大超市,只为了选两罐最新日期的奶粉,这种事情一定不止一个人做过!一直以来,人们对于“新鲜”有着亘古不变的追求。尤其是对待生活中的“…

Winform 进度条弹窗和任务控制

Winform 进度条弹窗和任务控制目录Winform 进度条弹窗和任务控制一、弹窗前台二、弹窗后台三、使用方法四、效果展示和代码地址独立观察员 2020 年 11 月 17 日最近要给一个 Winform 项目添加功能,需要一个能显示进度条的弹窗,还要求能够中止任务&#x…

c语言prime函数怎么用_C语言 要发就发

点击上方“蓝字”关注我们愉快的一天,不得不做的三件事:种田,锄地,整代码!!!【题目】“1898——要发就发”。请将不超过1993的所有素数从小到大排成第一行,第二行上的每个数都等于它…

linux如何使用vnc远程登录,如何使用Xmanager及VNC登录远程桌面

如何调用远程桌面,比较常见的有两种方式:Xmanager及VNC正好今天鼓捣了一下,特整理如下:XmanagerXmanager的调用也有两种方式:一、直接在Xshell中调用这时需设置会话属性,如下图所示,需在“隧道”…

python自然语言处理_python

chinese-xinhua/ | - data/ 汉字例子: { "word": "吖", "oldword": "吖", "strokes": "6", "pinyin": "ā", "radicals": "口", "explanation": &…

别在.NET死忠粉面前黑.NET5,它未来可期!

期盼已久的.NET5,终于在11月11日正式发布,整个.NET社区都为之沸腾,知乎、博客园、QQ群、微信群,随处可见.NET5 的热议,作为.NET死忠粉,我也挺兴奋的。然而一片欢歌笑语中总有一些很不和谐的声音&#xff0c…