取整函数

article/2025/8/19 2:39:39

一、函数说明

double 而言,取整、取余的相关函数和运算符请参考下表:

VB6.0

C 

C# 

Int(x)

floor(x)

Math.Floor(x)

floor表示地板,也就是将向下取整数,即返回最大的整数使得

Math.Floor(1.9)        返回    1

Math.Floor(1.0)        返回    1

Math.Floor(-1.0)        返回    -1

Math.Floor(-1.3)        返回    -2

Math.Floor(-1.9)        返回    -2

 

ceil(x)

Math.Ceiling(x)

ceil表示天花板,也就是将向上取整数,即返回最小的整数使得

Math.Ceiling(1.9)    返回    2

Math.Ceiling(1.3)    返回    2

Math.Ceiling(1.0)    返回    1

Math.Ceiling(-1.0)    返回    -1

Math.Ceiling(-1.9)    返回    -1

Fix(x)

 

Math.Truncate(x)

表示取的整数部分

Math.Truncate(1.9)    返回    1

Math.Truncate(1.0)    返回    1

Math.Truncate(-1.0)    返回    -1

Math.Truncate(-1.9)    返回    -1

Round(x)

 

Math.Round(x,...)

表示四舍五入,如:四舍五入取整

Math.Round(1.9)        返回    2

Math.Round(1.5)        返回    2

Math.Round(1.3)        返回    1

Math.Round(1.0)        返回    1

Math.Round(-1.0)    返回    -1

Math.Round(-1.3)    返回    -1

Math.Round(-1.5)    返回    -2

Math.Round(-1.9)    返回    -2

x Mod y

fmod(x,y)

x % y

返回 x / y 的余数,其符号与 x 一致。

C语言里 % 只能用于整型变量

注意:VB6.0会对结果四舍五入取整

x / y 

x / y 

x / y 

返回 x / y,对于整数而言,将舍去小数部分。

1、详述Math.Round

Math.Round 还有更丰富的功能

①精确到小数点后n

如:Math.Round(x,n) 表示对 x 只取小数点后 n 位,多余部分四舍五入。

②四舍五入问题

四舍是一定的,但对于五到底入还是不入呢?Math.Round是可以通过MidpointRounding来进行控制的。

MidpointRounding.AwayFromZero 表示五入,这是默认的方法,如:

Math.Round(1.5,MidpointRounding.AwayFromZero);    返回 2

Math.Round(-1.5,MidpointRounding.AwayFromZero);    返回 -2

MidpointRounding.ToEven 就比较有意思了,如果5前面的数字是奇数则入,否则就舍去。如:

Math.Round(2.5,MidpointRounding.ToEven);    返回 2

Math.Round(1.5,MidpointRounding.ToEven);    返回 2

Math.Round(-1.5,MidpointRounding.ToEven);    返回 -2

Math.Round(-2.5,MidpointRounding.ToEven);    返回 -2

二、函数关系

1floorceil的关系

floor(x) = -ceil(-x),同样的ceil(x)=-floor(-x)VB6.0里没有ceil函数,就可以用 -Int(-x) 来代替。

2Math.Truncate floorceil的关系

Math.Truncate(x) =

写成C语言代码就是

double Truncate(double x)

{

if(x >= 0.0)

{

return floor(x);

}

return ceil(x); //-floor(-x)

}

三、应用

1、归化角度

如:手表的秒针1分钟走1圈。分钟之后,它与起始位置的夹角是多少?显然这个角度等于度。现在要把这个角度归化到之间。即找到一个整数,使得成立。只考虑不等式的左半部分,则有,即。显然这个夹角应该是

同样的,判断经度是否在经度和经度之间(只考虑劣弧,不考虑优弧),不能使用。如:经度180在经度-179和经度179之间,但它不满足-179 < 180 < 179。应该使用下式判断

函数Angle360(x)将返回角度n是一个整数),且返回值在之间。显然,因此Angle360函数的C代码如下:

double Angle360(double x)

{

return x - floor(x / 360.0) * 360.0;

}

2、扩展fmod函数

上述问题里,将角度归化到之间可以使用fmod(360.0 * x,360.0);C#里可以使用(360.0 * x) % 360.0)。但是,使用fmod感觉不太方便——它的返回值符号与第一个参数的符号相同。也就是说 x 小于零,则返回值将在之间。因此有必要扩展fmod函数。

fmod(x,y)的实质是找到合适的整数,使得,然后返回余数

如果需要余数,则

如果需要余数,则

如果需要求绝对值最小的余数,则

fmod函数的模拟代码如下

double fmod(double x,double y)

{

y = fabs(y);

if(x >= 0.0)

{

y = x - y * floor(x / y);

}

else

{

y = x - y * ceil(x / y);

}

return y;

}

fmod函数的扩展代码如下

/****************************************************************\

x / y 的余数

nFlag    [in]        1    返回的余数大于等于零

                -1    返回的余数小于等于零

                2    返回绝对值最小的余数,若同时出现 ±(y / 2) 则取正值

                -2    返回绝对值最小的余数,若同时出现 ±(y / 2) 则取负值

                0     2 相同

\****************************************************************/

double fmodEx(double x,double y,int nFlag)

{

y = fabs(y);

if(nFlag < -2)

{

nFlag = -2;

}

else if(nFlag > 2)

{

nFlag = 2;

}

switch(nFlag)

{

case 1://返回的余数大于等于 0

y = x - y * floor(x / y);

break;

case -1://返回的余数小于等于 0

y = x - y * ceil(x / y);

break;

case -2://返回的绝对值最小的余数,优先考虑 - y / 2

y = x - y * floor(x / y + 0.5);

break;

default://返回的绝对值最小的余数,优先考虑 + y / 2

y = x - y * ceil(x / y - 0.5);

break;

}

return y;

}

3、格点

现在要在区间之间插入若干点,其中n是一个整数,d是一段固定的距离(只考虑正值),如:100米、1000米……

计算的时候要注意,不要写 for(double n = ceil(a/d);n <= floor(b/d);n++) 这样的代码,因为double是有误差的,这样会导致误差积累。应该这样:

double    n0        =    ceil(a/d);

double    x0        =    n0 * d;

int        nMax    =    (int)(floor(b/d) - n0 + 0.1);

double    x;

for(int i = 0;i <= nMax;i++)

{

    x    =    x0 + i * d;

}

下面的函数专门用来获取格点

/**********************************************************\

获取区间[a,b]之间的格点,格点坐标是 d 的整数倍

x0        [out]    返回起始格点。

                 d 大于零,x0 是坐标最小的格点

                 d 小于零,x0 是坐标最大的格点

返回:获得格点的个数 nCount

格点坐标为 x0 + n * dn = 0,1,2,...nCount - 1

\**********************************************************/

long GetLatticePoints(double a,double b,double d,double*x0)

{

long nCount = 0; //格点个数

double nMin; //n 的最小值

double nMax; //n 的最大值

 

a /= d;

b /= d;

if(a > b)

{

double t;

t = a;

a = b;

b = t;

}

nMin = ceil(a);

nMax = floor(b);

if(nMax >= nMin)

{

nCount = (long)(nMax - nMin + 1.1);

if(x0)

{

*x0 = nMin * d;

}

}

return nCount;

}

 


http://chatgpt.dhexx.cn/article/cSbmlPL2.shtml

相关文章

php 除法,php中如何除法取整

php中除法取整的方法&#xff1a;1、使用【round()】函数对浮点数进行四舍五入&#xff1b;2、使用【ceil()】函数向上舍入为最接近的整数&#xff1b;3、使用【floor()】函数向下舍入为最接近的整数。 php中除法取整的方法&#xff1a; 1. round&#xff1a;四舍五入 round()函…

Excel如何使用取整函数

如下图B列为随机录入的数据&#xff0c;现在想要将B列数据四舍五入保留两位小数 在C2单元格输入公式ROUND(B2,2) 将C2单元格下拉到底即可完成四舍五入保留两位小数。 如果想要保留整数&#xff0c;只需要将C2单元格公式改为ROUND(B2,0)&#xff0c;并下拉到底即可完成。 下面跟…

取整函数及其性质

1、取整函数定义及分类 取整函数是一类将实数映射到相近的整数的函数。 常用的取整函数有两个&#xff0c;分别是下取整函数和上取整函数。 下取整函数在数学中一般记作&#xff0c;在计算机科学中一般记作 floor(x)&#xff1b; 上取整函数在数学中一般记作&#xff0c;在…

mysql 向上取整_mysql的取整函数

一、ROUND()函数用法 ROUND(X) -- 表示将值 X 四舍五入为整数&#xff0c;无小数位 ROUND(X,D) -- 表示将值 X 四舍五入为小数点后 D 位的数值&#xff0c;D为小数点后小数位数。若要保留 X 值小数点左边的 D 位&#xff0c;可将 D 设为负值。 SELECT ROUND(123.456) 123 SELEC…

Mysql取整函数

Mysql取整函数 1.round 四舍五入取整 round(s,n)&#xff1a;对s四舍五入保留n位小数,n取值可为正、负、零. 如四舍五入到整数位&#xff0c;则n取零. 2.ceil 向上取整 ceil(s)&#xff1a;返回比s大的最小整数 3.floor 向下取整 floor(s)&#xff1a;返回比s小的最大整数 案…

使用grep关键字出现次数进行计数统计

使用grep关键字出现次数进行计数统计 模糊匹配 grep -o "keyword" filename |wc -l精确匹配&#xff08;以整个word 匹配&#xff09; grep -wo "keyword" filename |wc -l包含关键字的行数&#xff08;一行存在多个关键字&#xff0c;计数为1&#xff…

c语言面试笔试题及答案,C语言面试题(含答案)

1、某32位系统下, C程序void *p malloc( 100 ); sizeof (p) ? A.1 B.4 C.100 D.400 2、在一个10阶的B-树上&#xff0c;每个树根结点中所含的关键字数目多允许为( )个&#xff0c;少允许为( )个。 A.10,5 B.9,4 C.8,3 D.7,6 3、以下程序段执行后结果是() #include void main…

grep sed awk详解

1、基本正则 基本正则解释实例^以什么开头grep ‘^1’ id.txt 匹配以1开头 cat -A$以什么结尾grep ‘448$’ id.txt^$空行 这一行没有任何内容&#xff08;空格也是&#xff09;grep -n ‘^KaTeX parse error: Expected group after ^ at position 94: … grep -v ^̲’ id.txt…

linux命令四grep

文章目录 NAME名称SYNOPSIS概要DESCRIPTION描述OPTIONS选项Generic Program Information通用程序信息Matcher Selection匹配器的选择创建测试环境匹配正则测试只匹配字符串(包含特殊字符) Matching Control匹配控制匹配多个正则表达式从文件读取多个匹配样式匹配忽略大小写选择…

C语言基础

01 — Liunx相关命令 1.1 mv:移动&#xff0c;剪切命令 命令格式&#xff1a;mv 源文件 目标文件 作用&#xff1a;剪切成新文件mv 源文件 目标目录下 作用&#xff1a;剪切到制定目录里面去mv 源目录 目标目录 作用&#xff1a;剪切成新目录mv 源目录 目标目录下作用&#…

c语言三个标准流文件格式,标准C语言day02

标准C语言day02 复习&#xff1a; 1、常用的Linux命令 ls、cd、pwd clear touch cp mv rm cat/more/head/tail mkdir rmdir chmod find grep ifconfig ping whoami man sudo ftp telnet ssh tar 2、vim文本编辑器 vi是系统自带的文本编辑器&#xff0c;vim是它的增强版本。 三大…

cf1579

A. Casimir’s String Solitaire 给定一个只存在ABC的字符串&#xff0c;一次操作可以同时删除任意位置的‘A’和‘B’或‘B’和‘C’&#xff0c;问能否删完。 只需判断B的数量是否等于AC的数量。 #include<bits/stdc.h> using namespace std;#define read(a) scanf(&q…

CF 817 C

原题链接&#xff1a; Problem - C - Codeforces 题意&#xff1a; 问从 1 ~ n 有多少个数能使&#xff0c;它减去它的数字和 s。 解法&#xff1a; 可以发现&#xff0c;如果 num 满足条件&#xff0c;那么 num 1 一定也满足条件&#xff0c;所以就有单调性&#xff0c…

CF1837 A-D

A题 题目链接&#xff1a;https://codeforces.com/problemset/problem/1837/A 基本思路&#xff1a; 要求计算蚂蚱到达位置 x最少需要多少次跳跃&#xff0c;并输出蚂蚱的跳跃方案。因为每次可以向左或向右跳跃一定距离&#xff08;距离必须为整数&#xff09;&#xff0c;但是…

npm不是内部命令或外部命令

如上&#xff0c;看到npm -v 或者安装软件时&#xff0c;经常跳出的问题。npm需要加入环境变量中。 如上图片&#xff0c;新建两个文件 node_global\npm&#xff0c;并加入环境变量中。 D:nodejs\node_modules\npm路径下找到.npmrc文件&#xff0c;将其内容改为 prefixD:\node…

启动VUE工程时,出现npm不是内部命令

出现npm不是内部命令&#xff0c;然后查询node -v&#xff0c;也发现node不是内部命令。 所以定位应该是nodejs的问题&#xff0c;因为我的nodejs已经安装了&#xff0c;所以最大的可能就是没有配置环境变量或者配置的不对。 解决步骤&#xff1a; 1.设置环境变量&#xff1…

nvm安装node后npm不是内部命令

nvm install时先下载node&#xff0c;然后下载npm&#xff0c; 下载npm时在node安装目录中会出现temp文件夹&#xff0c;其中有npm压缩包 1、及时将npm压缩包复制出来&#xff0c;不然过会就被删除了 2、解压缩 查看安装目录 使用11.0.0版本 node能够使用&#xff0c;npm不能…

'npm' 不是内部或外部命令,也不是可运行的程序

使用npm命令提示: ‘npm’ 不是内部或外部命令&#xff0c;也不是可运行的程序 在安装nodejs时候&#xff0c;有时候我们会把它安装在d盘或别的盘时&#xff0c;经常会遇到npm环境变量没有配好&#xff0c;需要自己手动去配置。 nodejs在nodejs官网下载后直接点击安装 在安装完…

解决办法‘npm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

今天使用了nvm这个node的保姆级版本管理工具,的确很香。 首先打开官网nvm.uihtm.com/ 下载安装过程很顺利&#xff0c;但是验证node及npm是否安装成功时&#xff0c;出现下面错误提示。 C:\Users\Administrator>npm -v npm 不是内部或外部命令&#xff0c;也不是可运行的…

npm不是内部命令也不是外部可运用程序

在安装好nodejs之后发现每次执行npm命令的时候都会报错&#xff1a;npm不是内部命令也不是外部可运用程序 如下&#xff1a; 百度了很久了没有找到解决办法&#xff0c;最后通过https://blog.csdn.net/qq_41542894/article/details/80330108这篇文章才得以搞定 具体办法就是修…