3

週給とその週の総労働時間を入力するプログラムを実行しています。そして、答えは時給で表示されるはずです。しかし、正しい「centavos/小数点以下 2 桁」の式を表示できず、float % float で実行したくありません。助けてください!

#include <stdio.h>

int gethourpaypes(int weekpay, int hoursworked)
{
  int hourpaypes;
  hourpaypes = weekpay / hoursworked;
  return hourpaypes;
}

int gethourpaycent(int weekpay, int hoursworked)
{
  int hourpaycent;
  hourpaycent = ((weekpay / hoursworked) % 100);
  return hourpaycent;
}

int main()
{
  int hourpaypes, weekpay, hoursworked;
  int hourpaycent;
  printf("Enter total week pay in pesos: ");
  scanf("%d", &weekpay);
  printf("Enter total hours worked that week: ");
  scanf("%d", &hoursworked);
  hourpaypes = gethourpaypes(weekpay, hoursworked);
  hourpaycent = gethourpaycent(weekpay, hoursworked);
  printf("Your hourly pay rate is %.0d pesos and %.2d centavos", hourpaypes, hourpaycent);
  fflush(stdin);
  getchar();
}
4

3 に答える 3

1

fmod浮動小数点の剰余を計算するために使用します。%operator は、整数型のオペランドでのみ使用できます。

#include <math.h>
double fmod(double x, double y);
float fmodf(float x, float y);
于 2012-10-08T10:01:06.997 に答える
1

残念ながら、あなたの計算は両方とも間違っています。ペソの計算では実際に時給が計算されますが、小数点なしで印刷するため、整数のペソしか得られないように見えます。

時給は、

hourpay = weekpay / hoursworked;

それから、ペソで時給floor()を取得し、整数 ( ではないint) を取得します。

pesos = floor(hourpay);

残りはセンタボ。これは通常 で行われるround()ため、12.345 は 12 ペソと 35 センターボになります (ただし、floor()の代わりに で切り捨てることができますround())。

cvos  = round(100.0*(hourpay - pesos));

整数演算

週給をセンタボに換算し、労働時間で割ります。丸め誤差を最小限に抑えるためにfloat、最後の瞬間まですべてを残します。

int main()
{
    float weekpay, hoursworked;
    int centavos_per_hour, psos, cvos;

    printf("Enter total week pay in pesos: ");
    scanf("%f", &weekpay);
    printf("Enter total hours worked that week: ");
    scanf("%f", &hoursworked);

    centavos_per_hour = (weekpay * 100.0) / hoursworked;

    psos = centavos_per_hour / 100;  // Hourly pay is 2345 co = 23 pesos
    cvos = centavos_per_hour % 100;  // 

    printf("Your hourly pay is %d pesos %d centavos per hour\n", psos, cvos);

    return 0;
}
于 2012-10-08T10:07:21.973 に答える
1

自分自身や他の人に問題を引き起こさないでください。float/double などを使用してお金を表現しないでください。整数を使用します。1 は通貨の最小単位で、この場合は cent(avo) です。

于 2012-10-08T10:12:02.580 に答える