用C编程语言输入

时间:2015-04-09 21:45:17

标签: c

我希望代码从用户接收一个浮动数字,但只存储小数点后的两位数

例如,如果用户输入

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

2 个答案:

答案 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;
};

然后处理输入以分别读取它们,这将非常困难。