【发布时间】:2022-01-05 04:42:53
【问题描述】:
我写了一个简单的程序,用户输入一笔钱,然后计算机返回一些账单来找零。当我键入 99.99 时,计算机无法正确处理 0.01 分数。 roundf() 和 floorf() 不起作用。谁能知道如何解决这个问题?先感谢您。 注意:我现在正在学习指针是如何工作的,这就是我在这里使用指针的原因。
#include <stdio.h>
#include <math.h>
#define COINS_TYPES 14
void read_num(float* cash);
void analyze_and_result(float* arr, float* arr_val, float* cash);
int main(){
float cash;
float coins[COINS_TYPES] = { 0 };
float coins_val[COINS_TYPES] = { 200,100,50,20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01 };
for (;;) {
read_num(&cash);
analyze_and_result(coins, coins_val, &cash);
break;
}
return 0;
}
void read_num(float* cash) {
printf("Type amount of cash to exchange for coins\n");
scanf("%f", cash);
*cash = ceilf(*cash * 100) / 100; //seems that this line doesn't work
}
void analyze_and_result(float* arr, float* arr_val, float* cash) {
for (int i = 0;i < COINS_TYPES;i++) {
int flag = *cash / arr_val[i];
if (flag) {
arr[i] = flag;
*cash -= arr_val[i] * flag;
printf("Coins quantity %0.2f : %.f\n", arr_val[i], arr[i]);
}
}
}
【问题讨论】:
-
更改您的程序,以便在读取输入后立即将其转换为整数美分,并在剩余的计算中仅使用整数运算。如果做得好,浮点算术可以用于此,但这样做需要您还没有学过的知识。只需使用整数算术。最后,在输出数字时,您可以使用浮点将美分转换为美元,方法是打印
value/100.和%.2f。对于适度的金额,这不会有明显的舍入误差。 -
我将浮动现金分成两个整数部分,现在一切正常,谢谢
-
“我将浮动现金分成两个整数部分,现在一切正常” --> 我怀疑它是否能正常工作。发布该代码以获取详细信息。
标签: c floating-point type-conversion