小数的取舍

1. Math.Floor & Math.Ceiling(Floor——出头舍;Ceiling——出头算)

Math.Floor:
返回小于或等于指定小数的最大整数值。

Math.Floor(3.21);//3
Math.Floor(5.952);//5
Math.Floor(0.64);//0
Math.Floor(-0.64);//-1
Math.Floor(-5.2);//-6
Math.Floor(-5.8);//-6

Math.Ceiling:
返回大于或等于指定小数的最小整数值。

Math.Ceiling(3.21);//4
Math.Ceiling(5.952);//6
Math.Ceiling(0.64);//1
Math.Ceiling(-0.64);//0
Math.Ceiling(-5.2);//-5
Math.Ceiling(-5.8);//-5

注意:
返回类型为Double或者Decimal。

2. Math.Truncate 取整/截断

作用:
计算指定小数的整数部分。

示例:
Math.Truncate(3.21);//3
Math.Truncate(5.952);//5
Math.Truncate(0.64);//0
Math.Truncate(-0.64);//0
Math.Truncate(-5.2);//-5
Math.Truncate(-5.8);//-5

注意:
返回类型为Double或者Decimal。

3. Math.Round 舍入

作用:
Math.Round采取的舍入方式和Convert.ToInt32(Double)一样,都是使用bankers‘ rounding 规则(四舍六入五成双)

示例:
Math.Round(3.21);//3
Math.Round(5.5);//6
Math.Round(4.5);//4
Math.Round(-0.64);//-1
Math.Round(-5.5);//-6
Math.Round(-4.5);//-4

小数取舍:
Math.Round(Double, Int32),其中Int32指定返回值的小数位数。

示例:
Math.Round(3.44, 1); //Returns 3.4.
Math.Round(3.45, 1); //Returns 3.4.
Math.Round(3.46, 1); //Returns 3.5.

Math.Round(4.34, 1); // Returns 4.3
Math.Round(4.35, 1); // Returns 4.4
Math.Round(4.36, 1); // Returns 4.4

Pasted from <http://msdn.microsoft.com/zh-cn/library/zy06z30k.aspx>

扩展:
函数默认是按照bankers‘ rounding 规则(四舍六入五成双)的方法进行舍入。为了可以更灵活的进行舍入,函数添加了System.MidpointRounding 参数。

MidpointRounding.AwayFromZero:在正数情况下,这是最常见的四舍五入。在负数情况下,-4.5 -> -5。(负数情况下,-4.5四舍五入是-4还是-5,每个人都见解都不同)。

MidpointRounding.ToEven:就是默认的四舍六入五成双。

转自 http://blog.sina.com.cn/s/blog_6d5a77ce0100xpcb.html

时间: 2024-10-21 01:34:52

小数的取舍的相关文章

匹夫细说C#:妥协与取舍,解构C#中的小数运算

题外话 正文开始之前,我首先要感谢博客园提供的这个优秀的平台.通过在这个优秀的平台上和很多志同道合的朋友交流,互相帮助,我也很荣幸的获得了15年的微软MVP的奖项.也使我更加坚信了代码改变世界.感激!感恩!努力!加油! 0x00 前言 慕容在生活和工作中常常会遇到一些十分迷信机器的人,他们之中很多人都相信机器是最理智的,没有任何感情,是真正的铁面无私,因此机器的运算所给出的答案总是正确的,如果答案错误,那么一定是操作机器的人的问题.但机器的运算就一定是正确的吗?事实上,机器出现运算错误并不是一个

JS进位取舍和产生随机数结合

一.进位取整 最开始,先来看一下JS中进位取舍的几个小示例: //JS进位取舍 //向上取整 alert(Math.ceil(25.9)); //打印:26 alert(Math.ceil(25.5)); //打印:26 alert(Math.ceil(25.1)); //打印:26 //向下取整 alert(Math.floor(25.9)); //打印:25 alert(Math.floor(25.5)); //打印:25 alert(Math.floor(25.1)); //打印:25 /

C# 保留小数位数的方法

?  前言 本文主要介绍 C# 中实现小数位数的保留,完成对小数位数四舍五入的几种方法. 1.   使用 Math.Round() 方法 说明: 1)   其实使用 Math.Round() 方法,是根据国际标准(五舍六入)的方式进行取舍的. 2)   进1的情况有两种:1)保留小数位后面第1位大于等于6:2)保留小数位后面第1位等于5,则第2位必须大于0. double double1_1 = Math.Round(1.545, 0);            //2.0 double doub

js 小数计算为啥和想象中不一样!

今天遇到了一个比较有趣的事,如果要你计算0.1+0.2等于多少你会怎么回答? "0.3啊!"你可能都不会考虑.我也一样,当a=0.1,b=0.2时 if(a+b === 0.3){...}.我可能等一下午都等不到大括号中的内容被执行. 为啥呢?因为在js中0.1+0.2=0.30000000000000004.说起来你可能不信,又或者去验证一下.结果为啥是这样?在我查找资料之后豁然开朗.对于浮点型数据,大多语言计算都会丢失精度.但是像c++/java这种厉害的语言都有自己封装的一套方法

JAVA中的小数

JAVA中的小数称为浮点数 1.有两种类型: float:单精度浮点数.4个字节. double:双精度浮点数.8个字节. 2.类型转换 容量小  ------------------------------->  容量大 byte,short,char << int << long << float << double 容量小的类型会自动向容量大的提升:同时,容量大的向小的转,会发生精度丢失. 如下,整数127赋值给float和double的变量时,

在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数)

//在JS中,将text框中数据格式化,根据不同的小数位数,格式化成对应的XXX,XXX,XXX.XX(2位小数) 或者XXX,XXX,XXX(0位小数) function formatNum(num, n) {//参数说明:num 要格式化的数字 n 保留小数位 num = String(num.toFixed(n)); var re = /(-?\d+)(\d{3})/; while (re.test(num)) num = num.replace(re, "$1,$2") ret

使用awk进行数字计算,保留指定位小数

对于在Shell中进行数字的计算,其实方法有很多,但是常用的方法都有其弱点: 1.bc bc应该是最常用的Linux中计算器了,简单方便,支持浮点. [[email protected] ~]$ echo 1+2 |bc 3 [[email protected] ~]$ echo 5.5*3.3 |bc 18.1 [[email protected] ~]$ echo 5/3 |bc 1 [[email protected] ~]$ echo "scale=2;5/3" |bc 1.6

float 保留两位小数

比方说3.1415926,我现在想传给后台的是3.14,类型是必须是float类型,该怎么样做?还有即便通过运算得到了3.14,然后我要是按float传过去,是不是本质上传的还是3.1400000? float 保留两位小数 >> ios 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/ios/1010000008952392/float保留两位小数.html

分数化小数(C++)

输入整数a, b ,c, 输出a/b的小数形式,精确到小数点后c位,a, b ≤ 10^6, c ≤ 100.输入包含多组数据, 结束标记为a = b = c = 0. 答案如下 #include<iostream> #include<cmath> using namespace std; int main() { int a, b, c, m; int con[100]; cin >> a >> b >> c; while (a != 0 &a