我希望代码从用户接收一个浮动数字,但只存储小数点后的两位数
例如,如果用户输入
a=123.123456789
值等于123.12
#include <stdio.h>
int func(int x,int digit,int con,char* s)
{
int v;
v=x/digit;
v=v*digit;
x-=v;
if(con==1){
printf("%d %s(s) de R$ %.2f\n",(v/digit),s,(float)digit/100);
return x;
}
printf("%d %s(s) de R$ %.2f\n",(v/digit),s,(float)digit);
return x;
}
int main() {
int x=0;
float y;//if change to double the result will be true
scanf("%f",&y);
//y = ((int)(100.0 * y)) / 100.0;
x=(int)y;
y=y-x;
printf("NOTAS:\n");
char* arr="nota";
x=func(x,100,0,arr);
x=func(x,50,0,arr);
x=func(x,20,0,arr);
x=func(x,10,0,arr);
x=func(x,5,0,arr);
x=func(x,2,0,arr);
printf("MOEDAS:\n");
arr="moeda";
x=func(x,1,0,arr);
//mod
x=y*100;
x=func(x,50,1,arr);
x=func(x,25,1,arr);
x=func(x,10,1,arr);
x=func(x,5,1,arr);
x=func(x,1,1,arr);
return 0;
}
问题将在: https://www.urionlinejudge.com.br/judge/en/problems/view/1021
答案 0 :(得分:3)
如果您只想四舍五入到小数点,可以尝试以下方法:
a = ((int) (a*100))/100.0;
答案 1 :(得分:1)
该值只有2个小数位是显示它的问题,所以你只需要打印你感兴趣的小数位数,比如
float value = 123.123456;
printf("%.2f\n", value);
如果您想动态指定该数字,可以使用
float value = 123.123456;
int decimals = 2;
printf("%.*f\n", decimals, value);
如果您想要将值存储作为字符串,请使用sprintf()
或更好snprintf()
。
并且输入只有两位小数无论如何都没有意义,因为输出应该被过滤而不是输入,请注意,毕竟你将忽略用户插入的额外小数。
另外,请注意浮点数不能存储确切的数字,所以即使我只做两个小数位,也可以做
float value = ((int)(100.0 * 123.1234156)) / 100.0
存储的实际值可能是
123.1200000001
有更多的小数位。
你可以尝试的一件事是
struct RealNumber
{
int integerPart;
int decimalPart;
};
然后处理输入以分别读取它们,这将非常困难。