在C中手动实现舍入函数

问题描述 投票:0回答:3

我编写了一个 C 程序(这是我项目的一部分),将浮点值四舍五入到用户指定的给定精度。功能是这样的

     float round_offf (float num, int precision)

我在这个程序中所做的就是将浮点数转换为字符串,然后对其进行处理。

但是有没有办法让数字本身保持浮点数并实现相同的效果。

例如。 num = 4.445 prec = 1 结果 = 4.4

c floating-point rounding
3个回答
4
投票

当然有。很简单:

#include <math.h>

float custom_round(float num, int prec)
{
    int trunc = round(num * pow(10, prec));
    return (float)trunc / pow(10, prec);
}

编辑:在我看来,您想要这个是因为您认为格式字符串中无法具有动态精度。显然,你可以:

int precision = 3;
double pie = 3.14159265358979323648; // I'm hungry, I need a double pie
printf("Pi equals %.*lf\n", precision, pie);

这将打印

3.142


0
投票

正确版本(Clang):

float round_offf(float num, int precision)
{
  long power = pow(10, precision + 1);;
  long result = num * power;

  if ((result % 10) >= 5)
    result += 10;

  return ((float)result / (float)power);
}

-1
投票

是的:

float round_offf(float num, int precision)
{
  int result;
  int power;

  power = pow(10, precision + 1);
  result = num * power;
  if ((result % 10) > 5)
    result += 10;
  result /= 10;
  return ((float)result / (float)power);
}
© www.soinside.com 2019 - 2024. All rights reserved.