如何把这个数取整?
如何把取4舍五入的值?
以下方法可行么?
sprintf(b,".0f%",a)
sprintf(b,".0f%",a+0.5)
有没有可能出现 ".0f"自动就4舍五入?
16 个解决方案
#1
取整的话直接强制转换好了 (int)a
#2
double a = 123.456;
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
#3
取整:强制类型转换
double a = 123.455;
int n = (int)a;
四舍五入;
int m;
if((a - n) < 0.5)
m = n;
else
m = n + 1;
double a = 123.455;
int n = (int)a;
四舍五入;
int m;
if((a - n) < 0.5)
m = n;
else
m = n + 1;
#4
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
int c = (int)(a+0.5);//四舍五入
#5
我在VC,TURBOC下面调试了
#include <stdio.h>
main()
{
double a = 123.456,b=123.556;
printf("%.0f,%.0f",a,b);
}
输出结果是123,124
#include <stdio.h>
main()
{
double a = 123.456,b=123.556;
printf("%.0f,%.0f",a,b);
}
输出结果是123,124
#6
int c = (int)(a+0.5);//四舍五入
----
这个一定是四舍五入么?请编译和运行
#include <stdio.h>
int main(void)
{
double d;
int i, j;
d = 9.499999999999999999999999999999999999;
i = (int)(d);
j = (int)(d + 0.5);
(void) printf("i = %d\n", i);
(void) printf("j = %d\n", j);
getchar();
return 0;
}
----
这个一定是四舍五入么?请编译和运行
#include <stdio.h>
int main(void)
{
double d;
int i, j;
d = 9.499999999999999999999999999999999999;
i = (int)(d);
j = (int)(d + 0.5);
(void) printf("i = %d\n", i);
(void) printf("j = %d\n", j);
getchar();
return 0;
}
#7
C99里的round应该可以做到四舍五入,不过暂时未试验,在下的VC6不支持这个函数。
#include <math.h>
double
round(double x);
#include <math.h>
double
round(double x);
#8
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
#9
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
#10
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
=================================
错了i是9,j是10
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
=================================
错了i是9,j是10
#11
d = 9.499999999999999999999999999999999999;
=====================
问题是当你的9多过double表示的有效数字位后,编译器已经把这个数解释为9.50了.
或者说我的精度要求是10个9或8个9,后面还有数字,则我都可以把它看成9.50了.
double数本来就不可以绝对精确.
=====================
问题是当你的9多过double表示的有效数字位后,编译器已经把这个数解释为9.50了.
或者说我的精度要求是10个9或8个9,后面还有数字,则我都可以把它看成9.50了.
double数本来就不可以绝对精确.
#12
楼上正解!
#13
对,在turbo c中 double 有效数字是15~16位
#14
第二题,CB测试
int sign(long x)
{
float t;
AnsiString tx;
t=x/((abs(x)+0.1)*1.0);
tx.sprintf( "%.0f",t);
t=StrToInt(tx);
return t;
}
int sign(long x)
{
float t;
AnsiString tx;
t=x/((abs(x)+0.1)*1.0);
tx.sprintf( "%.0f",t);
t=StrToInt(tx);
return t;
}
#15
高手
#16
强转就行了嘛。。。
#1
取整的话直接强制转换好了 (int)a
#2
double a = 123.456;
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
#3
取整:强制类型转换
double a = 123.455;
int n = (int)a;
四舍五入;
int m;
if((a - n) < 0.5)
m = n;
else
m = n + 1;
double a = 123.455;
int n = (int)a;
四舍五入;
int m;
if((a - n) < 0.5)
m = n;
else
m = n + 1;
#4
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
int c = (int)(a+0.5);//四舍五入
#5
我在VC,TURBOC下面调试了
#include <stdio.h>
main()
{
double a = 123.456,b=123.556;
printf("%.0f,%.0f",a,b);
}
输出结果是123,124
#include <stdio.h>
main()
{
double a = 123.456,b=123.556;
printf("%.0f,%.0f",a,b);
}
输出结果是123,124
#6
int c = (int)(a+0.5);//四舍五入
----
这个一定是四舍五入么?请编译和运行
#include <stdio.h>
int main(void)
{
double d;
int i, j;
d = 9.499999999999999999999999999999999999;
i = (int)(d);
j = (int)(d + 0.5);
(void) printf("i = %d\n", i);
(void) printf("j = %d\n", j);
getchar();
return 0;
}
----
这个一定是四舍五入么?请编译和运行
#include <stdio.h>
int main(void)
{
double d;
int i, j;
d = 9.499999999999999999999999999999999999;
i = (int)(d);
j = (int)(d + 0.5);
(void) printf("i = %d\n", i);
(void) printf("j = %d\n", j);
getchar();
return 0;
}
#7
C99里的round应该可以做到四舍五入,不过暂时未试验,在下的VC6不支持这个函数。
#include <math.h>
double
round(double x);
#include <math.h>
double
round(double x);
#8
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
#9
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
#10
int b = (int)a;//取整
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
=================================
错了i是9,j是10
int c = (int)(a+0.5);//四舍五入
=================================
这个应该是满足精度要求的.
至于mymtom() 举的例子.没有说服力. 实际上,4后面出现14个9的情况下,i和j都还是9. 当超过double所能表示的有效数位后,就没有意义了.
=================================
确实没有说服力,i和j的输出都是10
=================================
错了i是9,j是10
#11
d = 9.499999999999999999999999999999999999;
=====================
问题是当你的9多过double表示的有效数字位后,编译器已经把这个数解释为9.50了.
或者说我的精度要求是10个9或8个9,后面还有数字,则我都可以把它看成9.50了.
double数本来就不可以绝对精确.
=====================
问题是当你的9多过double表示的有效数字位后,编译器已经把这个数解释为9.50了.
或者说我的精度要求是10个9或8个9,后面还有数字,则我都可以把它看成9.50了.
double数本来就不可以绝对精确.
#12
楼上正解!
#13
对,在turbo c中 double 有效数字是15~16位
#14
第二题,CB测试
int sign(long x)
{
float t;
AnsiString tx;
t=x/((abs(x)+0.1)*1.0);
tx.sprintf( "%.0f",t);
t=StrToInt(tx);
return t;
}
int sign(long x)
{
float t;
AnsiString tx;
t=x/((abs(x)+0.1)*1.0);
tx.sprintf( "%.0f",t);
t=StrToInt(tx);
return t;
}
#15
高手
#16
强转就行了嘛。。。