网站首页 > 技术文章 正文
概述
在开发软件系统的时候,我们经常会跟金钱打交道,C#中使用decimal类型来表示金钱,decimal的基数是10(float和double都是2),因此它更适合用来存储金钱类型的数值。对于金钱,我们也经常会进行四舍五入操作(有的系统使用分整型可能不需要四舍五入的操作),那么在C#中如何对decimal类型进行四舍五入呢?
Math.Round的使用
我们可以使用Math.Round函数来对decimal类型的数值进行“四舍五入”处理。来看下面的代码:
decimal levyMoney1 = 77.24m;
decimal levyMoney2 = 24.56m;
//设置保留一位小数并输出
("money1对应的输出:" + Math.Round(levyMoney1, 1)).Dump();
("money2对应的输出:" + Math.Round(levyMoney2, 1)).Dump();
输出结果如下:
结果跟我们期望的一致!但是事实真的是这样吗?让我们下面再看个示例。
decimal levyMoney3 = 50.35m;
decimal levyMoney4 = 50.45m;
//C#的Round函数都是采用Banker’s rounding(银行家算法),即:四舍六入五取偶
("money3对应的输出:" + Math.Round(levyMoney3, 1)).Dump();
("money4对应的输出:" + Math.Round(levyMoney4, 1)).Dump();
输出结果如下:
纳尼?输出的竟然都是50.4?和我们理解的“四舍五入”不一致啊!这是因为C#的Round函数都是采用Banker’s rounding(银行家算法),即:四舍六入五取偶。所以结果才都是50.4。
正确表达四舍五入
那么,如何才能正确地表达四舍五入呢?Round的方法有个重载,其中第三个参数(MidpointRounding)用来表示舍入的规范。因此,四舍五入可以通过设置该参数为MidpointRounding.AwayFromZero来达到目的,如下:
decimal levyMoney3 = 50.35m;
decimal levyMoney4 = 50.45m;
("money3四舍五入对应的输出:" + Math.Round(levyMoney3, 1, MidpointRounding.AwayFromZero)).Dump();
("money4四舍五入对应的输出:" + Math.Round(levyMoney4, 1, MidpointRounding.AwayFromZero)).Dump();
输出结果如下:
- 上一篇: 上位机组态控件(PCHMI6.0)(上位机组态是什么)
- 下一篇: C#中的类型转换(c#数据转换类)
猜你喜欢
- 2024-11-12 C#-练习题 014(c#程序题及答案)
- 2024-11-12 C# 类型转换(c类型转换有哪三种形式)
- 2024-11-12 C#-无参数有返回值的方法 060(有参无返回值 c语言)
- 2024-11-12 C#中的值类型和引用类型(c# 引用类型)
- 2024-11-12 abelkhan中的rpc框架(rpc框架应用场景)
- 2024-11-12 C#编程零基础到入门学习-C# 值类型和引用类型(4-8)
- 2024-11-12 2.6 C#的常用关键字和预定义类型(c#预留关键字)
- 2024-11-12 C#_图片拖拽(c#窗体图片移动)
- 2024-11-12 数据类型 - C#入门教程(c#常见数据类型)
- 2024-11-12 C#中堆栈(Stack)和堆(Heap)的区别——第一部分
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)