Как округлить в C с кастингом? - PullRequest
2 голосов
/ 15 марта 2019
include <stdio.h>
include <math.h>

int main() 
{
  int inches;
  float feet, cm, yard, meter;

  printf("Enter value <Unit: inches>:");
  scanf("%d", &inches);

  printf("Convert into *\n");

  feet = inches/12;
  cm = inches * 2.54;
  yard = inches/36.0;
  meter = cm/100;

  printf("====================\n");
  printf("feet\t:%6.2f\n", feet);
  printf("cm\t\t:%6.2f\n", cm);
  printf("yard\t:%6.2f\n", yard);
  printf("====================\n \n");
  printf("총 %dinches are %dm and %dcm.", inches, (int) round (cm/100), (int) cm%100);
}

Извините, я не знал, как правильно ввести код. Я хочу округлить последнюю часть "(int) cm% 100", потому что приведение C превращает ее в целое число, а затем округляет. Как бы мне это округлить? Он не отображается в сообщении, но я включил math.h и stdio.h

1 Ответ

4 голосов
/ 15 марта 2019

Выражение (int) cm % 100 сгруппировано как ((int) cm) % 100, которое усекает cm.Компиляция cm % 100 не удалась бы, поскольку % требует целочисленных аргументов в C.

Используйте fmod(cm, 100) для извлечения модуля с плавающей запятой и round результат.Обе функции находятся в math.h, т. Е.

(int)round(fmod(cm, 100))

является исправлением.

Но, тем не менее, вы можете обнаружить, что (int)round(cm) / 100 и (int)round(cm) % 100 возвращают более разумный вывод, если100cm больше не возможен.

Наконец, проверьте поведение на наличие отрицательных входных данных, которые лично я бы запретил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...