向上取整与向下取整
向上向下取整函數(shù)數(shù)只會對小數(shù)點后面的數(shù)字不為零的數(shù)進行操作,要是給它一個整數(shù) 它就返回整數(shù)本身.
對小數(shù)不為零的數(shù)操作:
向上取整 不管四舍五入的規(guī)則 只要后面有小數(shù)前面的整數(shù)就加1
向下取整 不管四舍五入的規(guī)則 只要后面有小數(shù)忽略小數(shù)
給定 4.9
調(diào)用用向下取整函數(shù) 得到的是 4
調(diào)用用向上取整函數(shù) 得到的是 5
向下取整的運算稱為Floor,用數(shù)學(xué)符號??表示,與之相對的,向上取整的運算稱為Ceiling,用數(shù)學(xué)符號??表示。
C語言定義的取整運算既不是Floor也不是Ceiling,無論操作數(shù)是正是負總是把小數(shù)部分截斷(Truncate),所以當操作數(shù)為正的時候相當于Floor,當操作符為負的時候相當于Ceiling。
網(wǎng)頁分頁常用到的一個分頁算法
假設(shè)變量x和n是兩個正整數(shù),我們知道x/n這個表達式的結(jié)果是取Floor,例如x是17,n是4,則結(jié)果是4。如果希望結(jié)果取Ceiling應(yīng)該怎么寫表達式呢?例如x是17,n是4,則結(jié)果是5,而x是16,n是4,則結(jié)果是4。
#include <stdio.h>
int main()
{
int x,n;
printf("請輸入數(shù)字:x n/n");
scanf("%d %d",&x,&n);
printf("x/n 向上取整的結(jié)果:%d/n",(x+n-1)/n);
printf("x/n 向上取整方法二:%d/n",(int)(((float)x/(float)n)+0.9));
return 0;
}
向下取整的運算稱為Floor,用數(shù)學(xué)符號??表示;向上取整的運算稱為Ceiling,用數(shù)學(xué)符號??表示。例如:
?59/60?=0
?59/60?=1
?-59/60?=-1
?-59/60?=0
在C語言中整數(shù)除法取的既不是Floor也不是Ceiling,無論操作數(shù)是正是負總是把小數(shù)部分截掉,在數(shù)軸上向零的方向取整(Truncate toward Zero),或者說當操作數(shù)為正的時候相當于Floor,當操作數(shù)為負的時候相當于Ceiling。
習(xí)題
假設(shè)變量x和n是兩個正整數(shù),我們知道x/n這個表達式的結(jié)果要取Floor,例如x是17,n是4,則結(jié)果是4。如果希望結(jié)果取Ceiling應(yīng)該怎么寫表達式呢?例如x是17,n是4,則結(jié)果是5;x是16,n是4,則結(jié)果是4。
習(xí)題的大意是如果X除N能除斷,則結(jié)果為余數(shù),如果X不能除斷,則結(jié)果為余數(shù)加1。
INT函數(shù)
將數(shù)字向下舍入到最接近的整數(shù),即取不大于自變量的最大整數(shù),
例如:int[6.4]=6 int[-9.7]= -10
語法
INT(number)
Number 需要進行向下舍入取整的實數(shù)。
示例
如果將示例復(fù)制到空白工作表中,可能會更易于理解該示例。
| ? | A |
| 1 | 數(shù)據(jù) |
| 2 | 19.5 |
| 公式 | 說明(結(jié)果) |
| =INT(8.9) | 將8.9向下舍入到最接近的整數(shù)(8) |
| =INT(-8.9) | 將-8.9向下舍入到最接近的整數(shù)(-9) |
| =A2-INT(A2) | 返回單元格A2中正實數(shù)的小數(shù)部分(0.5) |
類型標識符
C/C++編程語言中,int表示整型變量,是一種數(shù)據(jù)類型,用于定義一個整型變量,在不同編譯環(huán)境有不同的大小,不同編譯運行環(huán)境大小不同,在但是 32/64位系統(tǒng)中都是32位,范圍為-2147483648~+2147483647,無符號情況下表示為0~4294967295。
網(wǎng)上搜索到結(jié)果為如下:
1、
if((x%n)>0){result =x/n+1;}
else{result=x/n;}
2、
(x+n-1)/n);
3、
(int)(((float)x/(float)n)+0.9))
下面給出證明:
1. 設(shè)x=kn,k為整數(shù),即x為n的整數(shù)倍。則(x+n-1)/n=(kn+n-1)/n=((k+1)n-1)/n,此時分子沒有達到n的k+1倍,但大于等于n的k倍,
默認計算取下整則為k。符合要求。
2.設(shè)x=kn+m,k為整數(shù),m為整數(shù)且0<m<n。則(x+n-1)/n=(kn+m+n-1)/n=((k+1)n+m-1)/n。此時分子的大于等于(k+1)n,小于(k+2)n,
按照默認計算應(yīng)該為k+1。符合要求。
向上取整和向下取整的代碼實例:
#include <math.h>
#include <stdio.h>
void main( void )
{
double y;
y = floor( 2.8 );
printf( "The floor of 2.8 is %f ", y );
y = floor( -2.8 );
printf( "The floor of -2.8 is %f ", y );
y = ceil( 2.8 );
printf( "The ceil of 2.8 is %f ", y );
y = ceil( -2.8 );
printf( "The ceil of -2.8 is %f ", y );
}
Output
The floor of 2.8 is 2.000000 // 地板,就是取低
The floor of -2.8 is -3.000000 // 地板,就是取低,-3 比 -2.8 低
The ceil of 2.8 is 3.000000 // 天花板,就是取高
The ceil of -2.8 is -2.000000 // 天花板,就是取高,-2 比 -2.8高
Word->插入->符號,在字體中選擇Lucida Sans Unicode 子集選擇數(shù)學(xué)運算符 就能找到向上、向下取整符號
該習(xí)題解答如下:
#include <stdio.h>
int main()
{
int x,n;
printf("請輸入數(shù)字:x n
");
scanf("%d %d",&x,&n);
printf("x/n 向上取整的結(jié)果:%d
",(x+n-1)/n);
return 0;
}
linux 系統(tǒng)下編譯此程序步驟:
將這個程序保存成main.c,然后編譯執(zhí)行:
$ gcc main.c
$ ./a.out
gcc是Linux平臺的C編譯器,編譯后在當前目錄下生成可執(zhí)行文件a.out,直接在命令行輸入這個可執(zhí)行文件的路徑就可以執(zhí)行它。如果不想把文件名叫a.out,可以用gcc的-o參數(shù)自己指定文件名:
$ gcc main.c -o main
$ ./main
總結(jié)
- 上一篇: 使用代码创建ABAP transpare
- 下一篇: 使用代码获得ABAP software