C 从两个输入计算纸币和硬币的变化

C 从两个输入计算纸币和硬币的变化,c,math,precision,integer-arithmetic,C,Math,Precision,Integer Arithmetic,我有一个学校作业,在提供两个输入后,计算纸币和硬币的变化,这两个输入是物品的成本和投标的钱。在说明中,提到了一个测试用例,其中 请包括一个测试案例,如果美元的数量乘以100.0并转换为整数,而不添加微量,将刚好缺少正确的整数便士 我不确定它到底需要什么,当它说,将只是短的正确整数数的便士。 如果有人能解释,那将非常有帮助 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { double dcos

我有一个学校作业,在提供两个输入后,计算纸币和硬币的变化,这两个输入是物品的成本和投标的钱。在说明中,提到了一个测试用例,其中

请包括一个测试案例,如果美元的数量乘以100.0并转换为整数,而不添加微量,将刚好缺少正确的整数便士

我不确定它到底需要什么,当它说,将只是短的正确整数数的便士。 如果有人能解释,那将非常有帮助

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void)
{
  double dcost, dtendered;
  int    icost, itendered;
  int    itwenties, itens, ifives, iones, iquarters, idimes, inickels, ipennies;
  /* add any additional variables between here -> */
  int itotal;
  /* <- and here*/

  scanf("%lf", &dcost);
  scanf("%lf", &dtendered);

  icost     = (int)((dcost * 100.0) + 0.000001);
  itendered = (int)((dtendered * 100.0) + 0.000001);

  /* add code to calculate itwenties, itens, etc., between here -> */
  itotal    = itendered - icost;
  itwenties = itotal / 2000;
  itotal    = itotal % 2000;
  itens     = itotal / 1000;
  itotal    = itotal % 1000;
  ifives    = itotal / 500;
  itotal    = itotal % 500;
  iones     = itotal / 100;
  itotal    = itotal % 100;
  iquarters = itotal / 25;
  itotal    = itotal % 25;
  idimes    = itotal / 10;
  itotal    = itotal % 10;
  inickels  = itotal / 5;
  itotal    = itotal % 5;
  ipennies  = itotal;

  /* <- and here */

  printf("%2d twenties\n", itwenties);
  printf("%2d tens\n", itens);
  printf("%2d fives\n", ifives);
  printf("%2d ones\n", iones);
  printf("%2d quarters\n", iquarters);
  printf("%2d dimes\n", idimes);
  printf("%2d nickels\n", inickels);
  printf("%2d pennies\n", ipennies);

  while (1)
    getchar();
  return 0;
}      
\define\u CRT\u SECURE\u NO\u警告
#包括
内部主(空)
{
双dcost,双端;
国际货币基金组织,国际货币基金组织;
国际文明、国际文明、国际文明、国际文明、国际文明、国际文明、国际文明、国际文明、国际文明、国际文明;
/*在此之间添加任何其他变量->*/
国际贸易总公司;
/*  */
itotal=Itended-icost;
itwenties=itotal/2000;
itotal=itotal%2000;
itens=itotal/1000;
itotal=itotal%1000;
ifives=itotal/500;
itotal=itotal%500;
iones=itotal/100;
itotal=itotal%100;
iquarters=itotal/25;
itotal=itotal%25;
idimes=itotal/10;
itotal=itotal%10;
inickels=itotal/5;
itotal=itotal%5;
ipennies=itotal;

/*提示要求您查找整美元的金额,如果不使用
+0.000001

也就是说,你可能会意识到计算机上浮点数学的不精确性问题

您不需要在程序中这样做,相反,您应该正确地转换

但是,您应该有一个测试用例,它可以检测代码是否无法使用少量的代码进行正确的转换

这意味着,如果您提交了基本正确的程序,它将接受如此数量的测试。如果该测试(可能被视为边缘案例)失败,那么您不仅犯了一个小错误,还没有按照明确规定的要求进行工作。

我想这对你的成绩意味着更大的惩罚…

我想你被要求测试当
引用时会发生什么。也许让你的老师澄清一下

你能解释一下
+0.000001)
背后的逻辑吗?你知道浮点是如何转换成整数的吗?什么是截断


你知道为什么货币不应该用浮动来表示吗?(你见过办公空间吗?超人2?)

当我使用22.17表示成本,99.9999999表示投标金额时,如果没有添加小额金额,输出中显示2便士,但是添加小额金额时,输出中显示3便士。如果没有添加小额金额,输出中显示3便士,那么请检查我更新帖子的说明页请听我的吩咐,谢谢