嘿伙计们,我正在尝试编写一个程序,它将取一个小数部分的正数并将其四舍五入。例如32.4851将舍入到32.49,而32.4431将舍入到32.44。
我真的在这一点上有点失落,并希望你们能帮助我一点点。我使用stdio.h和math.h
编写了一些代码并需要反馈(不会使用gcc编译)#include <stdio.h>
#include <math.h>
double x;
int rounded_x;
int main (void)
{
printf ("Enter a number to be rounded \n\n\n\n\n");
scanf ("&lf", &x);
rounded_x=(int) (x+0.5);
return 0;
}
double scale (double x, int n)
{
double scale_factor;
scale_factor = pow(10, n);
return (x*scale_factor);
}
答案 0 :(得分:4)
乘以100,除以100解是正确的。但是由于浮点数据类型的性质,这最终会导致欺骗性结果。基数为10的漂亮的圆形数字,如&#34; 1.23&#34;并不总是转换为base-2浮点存储格式。所以你可能会发现四舍五入&#34; 1.2345&#34;结束为&#34; 1.23&#34;正如所料,但&#34; 1.1234&#34;将最终为&#34; 1.11989589285982959295892859289582958295&#34;或者是疯狂的东西。
出于这个原因,如果这种准确性很重要 - 特别是如果你在任何计算中使用这些舍入数字,那么你应该考虑以整数运算。
例如,在使用资金时,开发人员通常以美分而不是美元工作。所以,&#34; 1.75美元&#34;表示为&#34; 175&#34;。这保证了分数的准确性。当您想要将其显示给用户时,只能除以100。
答案 1 :(得分:3)
非常简单。你只需乘以100,加0.5,调用round()
,然后除以100。
答案 2 :(得分:0)
我认为您需要double ceil(double x)
来获取最小值或double floor(double x)
以获得最大值,这两者都包含在math.h中
答案 3 :(得分:0)
这取决于语言的特定实现的特征;对于综合,如果数字3为5或更多,则尝试将0.01加到该值,然后截断结果,如果可能的话,该变量只定义了2个小数位。
答案 4 :(得分:0)
顺便说一下
scanf ("&lf", &x);
应该是
scanf ("%lf", &x);
我认为..
答案 5 :(得分:-2)
最简单(但很难看)的代码是:
int main (void)
{
printf ("Enter a number to be rounded \n\n\n\n\n");
scanf ("&lf", &x);
rounded_x=((int)(x*100)/100.0);
return 0;
}