`
zxlyecf2
  • 浏览: 129611 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于四舍五入的小区别

    博客分类:
  • C#
阅读更多

常用小数舍入标准简介

1、标准四舍五入(Math.Round();)

当舍去位的数值大于等于5时,在舍去该位的同时向前位进一;当舍去位的数值小于5时,则直接舍去该位。

2、银行家舍入(decimal.Round())

所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法。其规则是:当舍去位的数值小于5时,直接舍去该位;当舍去位的数值大于等于6时,在舍去该位的同时向前位进一;当舍去位的数值等于5时,如果前位数值为奇,则在舍去该位的同时向前位进一,如果前位数值为偶,则直接舍去该位。

下面举.NET中处理decimal类型的一个例子:

using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace ConsoleApplication2 
{ 
        class Program 
        { 
                static void Main(string[] args) 
                { 
                        //Floor方法向负无穷方向舍入为最接近的整数 
                        Console.WriteLine(decimal.Floor(-1.3m)); //-2 
                        Console.WriteLine(decimal.Floor(3.5m)); //3 
                        Console.WriteLine(decimal.Floor(4m));     //4 
 
                        //Truncate方法向零方向舍入为整数 
                        Console.WriteLine(decimal.Truncate(-1.3m));//-1 
                        Console.WriteLine(decimal.Truncate(3.5m));//3 
                        Console.WriteLine(decimal.Truncate(4m));    //4 
 
                        //实现正的decimal数值的四舍五入,则必须用下面的技巧,保留到小数点后2位,就用100,保留到小数点后3位就用1000,依次类推 
                        decimal a = 8.335m, b = 8.345m; 
                        Console.WriteLine(decimal.Truncate(a * 100 + 0.5m) / 100); //8.34 
                        Console.WriteLine(decimal.Truncate(b * 100 + 0.5m) / 100); //8.35 
 
                        //实现负的decimal数值的四舍五入,则必须用下面的技巧,保留到小数点后2位,就用100,保留到小数点后3位就用1000,依次类推 
                        decimal c = -8.335m, d = -8.345m; 
                        Console.WriteLine(decimal.Truncate(c * 100 - 0.5m) / 100); //8.34 
                        Console.WriteLine(decimal.Truncate(d * 100 - 0.5m) / 100); //8.35 
                        Console.WriteLine(); 
                } 
        } 
}

 

 注意:小数默认的类型是double类型,所以凡是末尾没加mM的小数都是double类型。

System.DecimalRound方法和System.Math结构的Round方法默认情况下,都是采用的银行家舍入,即四舍六入五取偶,其中带一个参数的重载和带两个参数的重载形式下,默认都是银行家舍入。比较特殊的是带三个参数的Round方法,它的第三个参数是MidpointRounding枚举类型,MidpointRounding枚举类型定义了两个枚举值,为了实现四舍五入,我们这里使用的是MidpointRounding.AwayFromZero这个值。MidpointRounding.AwayFromZero枚举值的真正意思是:当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较大的值。

所以我们既可以使用Round方法的前两种重载形式实现银行家舍入,也可以使用带三个参数的Round方法实现四舍五入,但枚举值必须使用MidpointRounding.AwayFromZero,而不能使用MidpointRounding.ToEven

3
1
分享到:
评论

相关推荐

    excel中四舍五入的三种方法的比较

    excel中四舍五入的三种方法的比较 你知道那种最精确 你知道什么时候用那种方法合适吗

    计算2000年1月1日到现在有多少月,多少周(四舍五入)。

    计算2000年1月1日到现在有多少月,多少周(四舍五入)。

    JS处理数据四舍五入(tofixed与round的区别详解)

    下面小编就为大家带来一篇JS处理数据四舍五入(tofixed与round的区别详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    JS使用tofixed与round处理数据四舍五入的区别

    js中一般使用tofixed与round处理数据四舍五入,那么tofixed与round有什么区别呢?下面小编给大家分享JS使用tofixed与round处理数据四舍五入的区别,需要的朋友参考下吧

    整理的各种SAS文档资料(干货)

    包括: by分组和class分组的区别 datalines与datalines4语句详解 ...round四舍五入用法举例 SAS常用日期和时间函数 SAS导入文件和数据集用法举例 SAS中3种定义宏变量方法 SAS中nodupkey和nodup的区别 。。。。 等等

    java面试题大全--java基础,struts,spring,ejb等

    如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列...

    php中sprintf与printf函数用法区别解析

    下面是一个示例:四舍五入保留小数点后两位 复制代码 代码如下:<?php$num1 = 21;echo sprintf(“%0.2f”,$num1).” ”; //输出 21.00$num2 = 16.3287;echo sprintf(“%0.2f”,$num2).” ”; //输出 16.33$...

    基于WINCE 平台C#编程要点之一

    本文主要介绍在基于Windows CE 平台的英创嵌入式主板下进行C#(Microsoft Visual Stdio.Net 2005)应用程序开发时会常常用到的一些功能函数以及开发方法,这些方法适用 于英创采用WinCE 平台的所有型号嵌入式主板,...

    Oracle round()函数与trunc()函数区别介绍

    round(x[,y]) 【功能】返回四舍五入后的值 【参数】x,y,数字型表达式,如果y不为整数则截取y整数部分,如果y>0则四舍五入为y位小数,如果y小于0则四舍五入到小数点向左第y位。 【返回】数字 【示例】 select round...

    SQLServer和Oracle的常用函数对比

    5.四舍五入 6.e为底的幂 7.取e为底的对数 8.取10为底对数 9.取平方 10.取平方根 11.求任意数为底的幂 12.取随机数 13.取符号 14.圆周率 15.sin,cos,tan 参数都以弧度为单位 16.Asin,Acos,Atan,Atan2 返回...

    Javascript Math ceil()、floor()、round()三个函数的区别

    ◎Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)。 下面是使用这些方法的示例: alert(Math.ceil(25.9)); //26 alert(Math.ceil(25.5)); ...

    C#优化字符串操作

    保留2位有效小数及四舍五入 5.url传递中文的解决方案 6.把123456789转换为12-345-6789的3种方法 7.交换两个指定位置字符的4种方法 8.“%10”的妙用 9.输出21个AAAAAAAAAAAAAAAAAAAAA的巧妙做法

    社会上常用的Java试题库

    一、Java基础知识 1.Java有那些基本数据类型,... 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期

    asp中cint与clng的区别分析

    CInt Integer -32,768 至 32,767,小数部分四舍五入。 CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。 所谓溢出指的是超出处理数据的范围,下面代码是处理数据防止溢出的代码,大家可以自己看...

    ASP中CINT和INT的区别

    CInt 会进行四舍五入取最接近它的偶数,也就是说当小数部分为0.5XXXX时,它会取最接近X.5XX的偶数. 如 Cint(0.5)=0 ; Cint(1.5)=2 ; Cint(2.5)=2 ;Cint(3.5)=4 而Int就是取整函数,会去除小数点部分.如 Int(1.5)=1 … ...

    matlab矩阵共轭代码-python-notes:一点区别重点小笔记

    四舍五入函数round() (2)非内建函数 import 模块1,模块2(导入所有函数) from 模块 import 模块属性(导入部分函数或类) import 包名.子包名.模块名(使用的时候就是AAA.CCC.c1.func(1) fro

    python取余运算符知识点详解

    python取余运算符是什么? python取余运算符是%,即表示取模,返回除法的余数。 假设变量: a=10,b=20: 那么b % a 输出结果 0 ...3) round函数遵循四舍五入的法则 >>> 5//3 1 >>> -5//3 -2 >>> int(5.3)

    matlab代码输入如何换行符-CIC:中投公司

    四舍五入 在信号处理应用中,通常需要一种不产生直流偏置的舍入方法,这些方法称为对称方法。 无论十进制值是大于还是小于0.5,它们都通过向上或向下舍入到最接近的整数来工作。 如果十进制值正好是0.5,则需要平局...

Global site tag (gtag.js) - Google Analytics