#include <stdio.h> /* printf */
#include <math.h> /* round, floor, ceil, trunc */
inline int myIntRound(double dInput)
{
if(dInput >= 0.0f)
{
return ((int)(dInput + 0.5f));
}
return ((int)(dInput - 0.5f));
}
double d[]={-1.5, -0.7, -0.5, -0.3, 0.3, 0.5, 0.7, 1.5, 1.9};
int print_doubles(double d[], int n)
{
printf("original\n");
for(int i=0;i<n;i++)
printf (" %f", d[i]);
printf("\n");
}
//直接int會舍棄浮點部分,只取整數
int print_int_doubles(double d[], int n)
{
printf("int\n");
for(int i=0;i<n;i++)
printf (" %f", double(int(d[i])));
printf("\n");
}
int print_round_doubles(double d[], int n)
{
printf("round\n");
for(int i=0;i<n;i++)
printf (" %f", round(d[i]));
printf("\n");
for(int i=0;i<n;i++)
printf (" %d", int(round(d[i])));
printf("\n");
}
int print_ceil_doubles(double d[], int n)
{
printf("ceil\n");
for(int i=0;i<n;i++)
printf (" %f", ceil(d[i]));
printf("\n");
}
int print_floor_doubles(double d[], int n)
{
printf("floor\n");
for(int i=0;i<n;i++)
printf (" %f", floor(d[i]));
printf("\n");
}
int print_trunc_doubles(double d[], int n)
{
printf("trunc\n");
for(int i=0;i<n;i++)
printf (" %f", trunc(d[i]));
printf("\n");
}
//和round
int print_myint_doubles(double d[], int n)
{
printf("myint\n");
for(int i=0;i<n;i++)
printf (" %d", myIntRound(d[i]));
printf("\n");
}
int main ()
{
print_doubles(d, sizeof(d)/sizeof(d[0]));
print_int_doubles(d, sizeof(d)/sizeof(d[0]));
print_round_doubles(d, sizeof(d)/sizeof(d[0]));
print_floor_doubles(d, sizeof(d)/sizeof(d[0]));
print_ceil_doubles(d, sizeof(d)/sizeof(d[0]));
print_trunc_doubles(d, sizeof(d)/sizeof(d[0]));
print_myint_doubles(d, sizeof(d)/sizeof(d[0]));
return 0;
}
/*
:! ./round
original
-1.500000 -0.700000 -0.500000 -0.300000 0.300000 0.500000 0.700000 1.500000 1.900000
int
-1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 1.000000
round
-2.000000 -1.000000 -1.000000 -0.000000 0.000000 1.000000 1.000000 2.000000 2.000000
-2 -1 -1 0 0 1 1 2 2
floor
-2.000000 -1.000000 -1.000000 -1.000000 0.000000 0.000000 0.000000 1.000000 1.000000
ceil
-1.000000 -0.000000 -0.000000 -0.000000 1.000000 1.000000 1.000000 2.000000 2.000000
trunc
-1.000000 -0.000000 -0.000000 -0.000000 0.000000 0.000000 0.000000 1.000000 1.000000
myint
-2 -1 -1 0 0 1 1 2 2
*/
測試后可以發現,直接int轉換不行,會丟失浮點部分。 要用+0.5或-0.5方式。 或者用round函數