【小数点】C#使用Math.Round方法保留指定小数点位数,并且整数也同样保持统一的2位
2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试!
在实际开发项目中,特别是涉及金额之类的字段,一般都会用到小数,有些是保留1、2、3小数点。
本篇文章主要简单讲讲,如何保持整数、1位小数等都统一保持2位小数点
目录
- 一、业务场景
- 1.1、财务和会计
- 1.2、金融交易
- 1.3、科学和工程计算
- 1.4、销售和零售
- 1.5、数据分析和报告
- 二、保留2位小数
- 2.1、Round方法处理
- 2.2、ToString方法处理
- 三、decimal和double的区别
- 3.1、精度
- 3.2、误差
- 3.3、存储空间
- 四、decimal和double应用场景

一、业务场景
有很多业务场景在处理数值时需要保留小数点。
- 以下是一些常见的例子:
1.1、财务和会计
在财务和会计领域,精确的小数点是非常重要的。比如计算利润、损益、税务和利率等,需要保留多位小数点以确保准确性。
1.2、金融交易
在金融交易中,涉及到金额、利率、汇率等数据,需要保留小数点以确保计算结果的精确性。
1.3、科学和工程计算
在科学和工程领域,需要进行精确的计算和测量。例如,物理实验、数值模拟和工程设计中需要保留小数点来表示测量值、计算结果和模型参数。
1.4、销售和零售
在销售和零售业务中,价格计算通常需要保留小数点。例如,销售商品时,需要计算价格、税费、折扣等。
1.5、数据分析和报告
在数据分析和报告中,保留小数点可以提供更精确的结果。例如,计算百分比、平均值、标准差等时需要保留小数点。
这只是一些业务场景的例子,保留小数点的需求是广泛的,因为准确性对于这些领域非常重要。
二、保留2位小数
2.1、Round方法处理
在C#中,可以使用Math.Round方法来保留指定小数位数。要保留两位小数,可以传递第二个参数作为小数位数。
- 以下是一个示例:
double number = 3.14159;
double roundedNumber = Math.Round(number, 2);Console.WriteLine(roundedNumber); // 输出 3.14
以上方法,对于超过3位小数来说,保留2位小数是没问题的,但是如果是3.10,那么会自动显示位3.1,省略了0的值,如果是3.00,那么直接就是3。
这样在某些场景下就不统一。
在上面的示例中,
number被舍入为两位小数,并存储在roundedNumber变量中。
最后,我们将roundedNumber打印到控制台上,结果为3.14。
2.2、ToString方法处理
如果需要在C#中使用Math.Round方法来保持2位小数,即使是整数,可以进行一些额外的处理。
- 以下是一种实现方式:
double number = 3;
double roundedNumber = Math.Round(number, 2);
string formattedNumber = roundedNumber.ToString("0.00");Console.WriteLine(formattedNumber); // 输出 "3.00"
在上面的示例中,我们首先使用
Math.Round方法将整数number保留为2位小数,并将结果存储在roundedNumber变量中。
然后,我们使用ToString方法将roundedNumber转换为字符串,并使用"0.00"格式化字符串来保持2位小数。
最后,将格式化后的字符串打印到控制台上,结果为"3.00"。这种方式可以确保整数也被保留为2位小数。
三、decimal和double的区别
decimal和double是在C#中用于表示和处理数值的两种不同数据类型。
- 主要区别如下:
3.1、精度
decimal是用于高精度计算的数据类型,它能够表示较大范围内的小数,并具有较长的有效数字位数(28-29位)。而double则是双精度浮点类型,它具有较大的取值范围,但有效数字位数相对较少(15-16位)。
3.2、误差
由于浮点数的特性,使用double进行计算时可能会存在舍入误差或精度丢失的问题。而decimal类型的计算是通过基于十进制的固定点算术进行的,相对更加精确,可以避免舍入误差。
3.3、存储空间
decimal占用的存储空间比double更大,因为它需要存储更多的有效数字和小数位数。通常情况下,decimal占用16个字节,而double占用8个字节。
根据具体业务需求,选择适当的数据类型非常重要。
如果需要进行货币计算、精确度要求较高的金融计算或其他需要确保精度的场景,推荐使用decimal类型。
而对于科学计算、较大范围的数值计算或精确度要求相对较低的场景,double类型通常更为适合。
四、decimal和double应用场景
decimal的应用场景:
- 金融计算:货币、利率、税务和会计计算需要高精度和准确性,
decimal在这些场景中很常见。 - 商业应用:例如订单金额、价格计算、库存数量等需要保持准确而精确的计算。
- 费率计算:涉及到分摊、比例和系数的计算,通常需要使用
decimal来确保精度不丢失。
double的应用场景:
- 科学和工程计算:
double常用于模拟物理过程、计算机图形、三维渲染等需要较大范围和较高计算性能的领域。 - 物理学和工程学领域:例如测量结果、传感器数据和物理模型等,通常使用
double来表示和处理实际测量值。 - 运算速度较为重要的计算:由于
double是CPU原生支持的浮点数格式,它的计算速度通常比decimal更快。
需要根据具体情况权衡使用哪种数据类型。
如果对精确度要求很高或涉及货币、金融等计算,应使用decimal。
如果涉及科学计算、物理模型或需要更高的计算性能,则可以使用double。
在选择数据类型时,还要考虑计算效率和内存占用的平衡。
相关文章:
【小数点】C#使用Math.Round方法保留指定小数点位数,并且整数也同样保持统一的2位
2023年,第38周。给自己一个目标,然后坚持总会有收货,不信你试试! 在实际开发项目中,特别是涉及金额之类的字段,一般都会用到小数,有些是保留1、2、3小数点。 本篇文章主要简单讲讲,如…...
Android多种方法获取系统属性
这里使用获取rga版本为例 1,使用sh脚本方法 sh的编写 echo $(getprop vendor.rga_api.version) 其中,vendor.rga_api.version是关键字 相关方法也有两种,一种是从sh脚本读取流,一种是指令很少的,直接读取字符串化…...
密码学【一】
前言 在区块链的整个体系中大量使用了密码学算法,比如用于 PoW 的哈希算法,用于完整性验证的 Merkle Tree,用于交易签名与验证的数字签名算法,用于隐私保护的零知识证明等等。 可以说密码学是保证区块链安全的基石,而区…...
企业如何选择舆情优化处置公司?
随着互联网的发展成熟,网络上的信息量已经非常之巨大,网络上的海量信息有对企业有利的,其实也有一些企业经营不利的,让不利的信息下沉,让有利的信息排上搜索首页,这就是舆情优化的简单表述。 对于大中型企业…...
HBASE知识点
HBASE是什么? 高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库。利用HDFS作为其文件存储系统,利用MapReduce来处理HBase中的海量数据。利用Zookeeper作为其分布式协同服务。用于存储非结构化和半结构化的松散数据。 HBase数据模型 RowKey: 唯…...
Python新手入门
文章目录 概要python代码运行结果小结 概要 以下内容为python各种输出语句的语法! python代码 # 标准化输出 print("这是标准化输出!")# 格式化输出 print("这是第1种%s"%"格式化输出!") print("这是第…...
vite + react + typescript + uni-app + node 开发一个生态系统
简介 使用 vite react typescript uni-app node 来开发一个简易的生态系统案例,包含 APP,H5,微信小程序,控制台,服务端 开发 admin 技术栈:vite react typescript初始化控制台项目选择自定义预设…...
python pdf文件转图片
在Python中,有很多的第三方库可以用于PDF文件的转换,比如PyPDF2和pdf2image。 其中PyPDF2可以从PDF文件中提取每一页并将其保存为图像文件,需要安装Pillow库。 pdf2image则直接将PDF文件转换为PNG或JPEG图像文件,可以使用ImageM…...
牛客: BM7 链表中环的入口结点
牛客: BM7 链表中环的入口结点 文章目录 牛客: BM7 链表中环的入口结点题目描述题解思路题解代码 题目描述 题解思路 用一个哈希表存储链表节点,遍历链表,将节点加入哈希表,如果该节点在哈希表中出现过,意味着该节点是入口节点 题解代码 package mainfunc EntryNodeOfLoop(p…...
SpringMVC系列(七)之自定义注解
目录 一. Java注解简介 1.1 Java注解分类 1.2 JDK基本注解 Override Deprecated SuppressWarnings 1.3 JDK元注解 从 Java 7 开始,额外添加了 3 个注解: 1.4 自定义注解 如何自定义注解? 二. 自定义注解示例 枚举类: 示例一&…...
MongoDB的搭建 和crud操作
MongoDB docker 下载 docker run --restartalways -d --name mongo -v /docker/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6使用navcat工具使用MongoDB Crud操作 jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>lom…...
软件设计师考试学习1
前言 计算机组成原理及体系结构 数据的表示 进制的转换 原码反码补码移码 最高位是符号位,负数符号位为1 反码补码正数和原码一样,负数有区别 反码符号位不动,其他位置取反 补码在反码基础上加1 移码是将补码的符号为取反 在原码和反码中…...
【云计算】虚拟私有云 VPC
虚拟私有云 VPC 1.前言1.1 基本介绍1.2 VPC 的作用1.3 VPC 的适用人群 2.VPC 基本概念2.1 VPC 相关基本概念2.2 其他相关基本概念 3.VPC 通信场景3.1 VPC 内部互通3.2 VPC 间互通3.2.1 对等连接3.2.2 Transit Gateway 或者云联网 3.3 访问 Internet3.3.1 Internet 网关3.3.2 NA…...
@EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行
文章目录 前言EventListener 监听事件 ,在同一个虚拟机中如何保证顺序执行1. 设计原理2. 具体编码2.1. 编码事件监听器2.2. 制作一个生成序号方法2.3. 制作测试代码2.4. 测试结果 前言 如果您觉得有用的话,记得给博主点个赞,评论,…...
数据结构入门 — 树的概念与结构
本文属于数据结构专栏文章,适合数据结构入门者学习,涵盖数据结构基础的知识和内容体系,文章在介绍数据结构时会配合上动图演示,方便初学者在学习数据结构时理解和学习,了解数据结构系列专栏点击下方链接。 博客主页&am…...
linux驱动开发day6--(epoll实现IO多路复用、信号驱动IO、设备树以及节点和属性解析相关API使用)
一、IO多路复用--epoll实现 1.核心: 红黑树、一张表以及三个接口、 2.实现过程及API 1)创建epoll句柄/创建红黑树根节点 int epfdepoll_create(int size--无意义,>0即可)----------成功:返回根节点对应文件描述符…...
9月15日作业
Qt代码 #include "mywnd.h"//构造函数的定义 mywnd::mywnd(QWidget *parent): QWidget(parent) //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作 {//窗口设置this->resize(QSize(500, 433));this->setWindowTitle("Widget&quo…...
关于Java多线程的那些事
多线程 多线程1. 关于多线程的理解1.1 进程和线程1.2 并行和并发1.3 线程调度 2. 创建多线程的方式创建线程有哪几种方式?2.1 通过继承Thread类来创建并启动线程的步骤如下:2.2 通过实现Runnable接口来创建并启动线程的步骤如下:2.3 通过实现…...
信息化项目验收的依据、内容和验收测评报告
随着信息系统业务覆盖率的提高和深度整合创新的逐步提高,信息系统运行阶段的复杂性和资源比例逐渐增加。一方面,信息已成为业务创新、技术应用和运营服务的综合体,而不仅仅是技术平台建设。另一方面,信息采购是技术平台建设。另一…...
解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性
问题场景 IDEA执行mvn clean package -DskipTesttrue命令或者借助工具的Maven菜单进行打包操作,然后执行java -jar app.jar命令后,提示jar中没有主清单属性 D:\WorkSpace\demo\target>java -jar demo-SNAPSHOT.jar demo-SNAPSHOT.jar中没有主清单属性…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
