C# 四舍五入中一处易错点

,你没看错,四舍五入的结果 和我们期待的不太一样

Why??

进入源码看下,注释中解释的很清楚。。

默认情况下,Math.Round()方法返回的是最接近的整数,这个没问题,问题是当要转换的数据在 两个整数之间时即 0.5时,这个方法默认会返回两个整数中的偶数,并不是我们认为的0.5就进位

如果我们需要实现四舍五入 我们看它的几个重载方法

其中

这个方法的参数MidpointRounding枚举 参数给出了当数据是两个整数之间的数值时,如果取整数

其中第二个,会舍入较小的那个整数,也就是取较大的值,这个正是我们所希望的,所以我们四舍五入时候 需要将这个参数加上,并且参数值设为  AwayFromZero

之前正没有仔细注意过,以后要多注意一些常用方法的重载,以防止出现类似的问题

例如 如下一段代码:

执行完转换后 id 的值是多少?

如果稍微不注意很容易认为是100,其实是0.out 是只传出 不管入的

原文地址:https://www.cnblogs.com/yaoweijun/p/9982277.html

时间: 2024-08-30 13:48:33

C# 四舍五入中一处易错点的相关文章

字符串,向量和数组中的易错点

while (cin >> word){ cout << endl; } cin>>word; 在输入Ctrl+Z后,后面的输入就都不能接受到数据了.   在string s:中s.empty();是意味着S为空及s=="";而不能将s=NULL;是错的.   在vector中注意基本是函数的调用.   iterator 中的begin和end,

C#中ListView易错的方法

现在有一个ListView(lv1),有2列. ListViewItem lvi = new ListViewItem(); lvi.Text = "语文"; lvi.SubItems.Add("99"); lvi.Items.Add(lvi); lvi = new ListViewItem(); lvi.Text = "数学"; lvi.SubItems.Add("100"); lvi.Items.Add(lvi); 有同学

[笔试题]sizeof系列面试题中的易错之处

sizeof系列笔试题看似简单,其实如果不深入探究,很容易出错,本人就有时败在了这,特写篇博客总结一番,引以为戒. V1.0 32位和64位编译器的区别 测试代码如下: #include "stdafx.h" #include <iostream> using namespace std; int main() { //32和64位编译器区别: 除了*与long随操作系统子长变化而变化外,其他的都固定不变(32位和64相比) //32: sizeof(*)=4 sizeof

java基础中的易错点

包 包在java中类似于c++命名空间 1.1.如何建立多层包? 传送门 注意: 每个包目录下面的文件,开头的格式都是package bag1.bag2.xxx.xxx...; 表示这个文件在哪个包(目录)里面.不能随意修改和删除这个语句,要不然产生不匹配的错误. 在一个包(目录)下新建一个文件夹,那么这个文件夹就会变成子包. 原文地址:https://www.cnblogs.com/yulianggo/p/10426527.html

Java代码实际应用中的易错点记录

1 创建对象 在fight方法中想根据接收到的名字创建不同的对象,最后调用方法,其中palnt是一个接口这三种对象已经实现了该接口.但在运行时下面代码是错误的因为我在if中声明了plant其作用范围只在{ }有效,因此后面直接使用是错误的. public void fight(String name){ if ("Bean".equals(name)){ Plant plant = new Bean(); }else if ("Ice".equals(name)){

指针重难、易错点

(一)函数指针 在前边的blog中,已经整理归纳了数组和初级指针,接下来,我来继续整理高级指针和如何正确使用指针. 我们说过,指针数组是一个数组,每个元素是指针:数组指针是个指针,指向的是数组.所以: 函数指针就是指向函数的指针.我们先看以下代码: <pre name="code" class="cpp">void fun() { } int main() { printf("%p",fun); printf("%p&quo

集合框架中,引用数据类型对象集合的构建,易错点分析

先来个完整的效果代码:其目的创建5个学生对象,录入姓名与年龄的对象,并用集合将其遍历出来.易错点:1.如果不在学生对象中重写toString方法,那么在集合中就会出现,遍历出来后的arr{i}全部都是引用的对象地址,并不是对象.2.引用数据类型与基本数据类型最大的区别,引用数据类型要事先定义好各项属性与方法.要知道有参构造的作用是初始化方法里的属性.3.定义setname().getname().setage().getage()这四个方法,通过这四个方法来实现对name和age的操作.这样一来

细节!重点!易错点!--面试java基础篇(一)

今天来给大家分享一下java的重点易错点部分,也是各位同学面试需要准备的,欢迎大家交流指正. 1.java中的main方法是静态方法,即方法中的代码是存储在静态存储区的. 2.任何静态代码块都会在main方法之前执行. 3.java程序的初始化顺序:原则:静态优先于非静态,且只初始化一次:父类优先于子类:按照成员定义顺序初始化.例顺序:父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数. 4.

PAT乙级15分题易错题总结

PAT乙级15分题易错题总结 B1026 程序运行时间 输入格式: 输入在一行中顺序给出 2 个整数 C1 和 C2.注意两次获得的时钟打点数肯定不相同,即 C1 < C2,并且取值在 [0,107]. 输出格式: 在一行中输出被测函数运行的时间.运行时间必须按照 hh:mm:ss(即2位的 时:分:秒)格式输出:不足 1 秒的时间四舍五入到秒. 输入样例: 123 4577973 输出样例: 12:42:59 易忽略细节 在计算时,未能正确四舍五入,除100以后余数只要不为零都进位1.//er