C:我如何使一个数字总是向上舍入

时间:2014-10-18 21:19:05

标签: c function rounding

我想制作一个根据时间计算成本的功能。任何不到三小时的时间,它将返回2美元的统一费率。对于每小时或超过一小时的部分时间,它将额外收取0.50美元。用户将小时数作为浮点数据类型输入到2位小数。如何才能将它总是将时间缩短到整整一个小时?这是我到目前为止功能的代码:

int calculateCharges(float hours)
{
 if (hours <= 3){
    return 2.00
}
else

2 个答案:

答案 0 :(得分:1)

首先,您使用数据类型int,它不能保存小数值(并且会在调用函数之前隐式将它们舍入为零。)您应该使用double代替,因为这是小数的正确数据类型。

您还希望使用ceil(x)函数,该函数提供的最接近的整数大于或等于x

#include <math.h>

double calculateCharges(double hours)
{
  if (hours <= 3) {
    return 2.00;
  } else {
    // return $2.00 for the first 3 hours,
    //  plus an additional $0.50 per hour begun after that
    return 2.00 + ceil(hours - 3) * 0.50;
  }
}

答案 1 :(得分:0)

要回答您的查询,您应该研究您的变量类型。您使用小时作为输入,但是返回2.00这是一个浮点数(也就是不是整数)

#include <math.h>

double calculateCharge(double hours)
{ 
 //To use accurately the ceil function from Math, the parameter should be a double!
  double calculateTime = ( hours <3) ? 2 : (2+ceil(hours-3)*0.50); 
  return calculateTime;
}

包含math.h标头以便能够使用Math struc。当你必须计算值时,它是一个非常有用的结构,你可以计算一个数字的正弦。在我们的情况下,ceil函数将始终返回值以向上舍入到最接近的整数。您可以在此处了解详情:http://www.techonthenet.com/c_language/standard_library_functions/math_h/ceil.php 哦,而且,你说不到三个小时,但在你的功能中你说少或等于3.确保你实际上使用好的操作员或者你可能最终得到你在运行你的功能时不期望的结果!

哦,你可以在那里查找三元运算符,以便更好地理解它,因为它第一次有点模糊:http://msdn.microsoft.com/en-us/library/ty67wk28.aspx

希望它可以帮助你:)

相关问题