gpt4 book ai didi

c - 如何通过在 C 中转换为 int 来舍入 float

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:46 24 4
gpt4 key购买 nike

所以我是大学二年级的新生。我的老师要我们编写一个函数,将 float 四舍五入到最接近的百分之一。他说我们需要将 float 转换成整数数据类型,然后再转换回 float 。他就是这么说的。我已经花了至少 5 个小时尝试不同的方法来做到这一点。

到目前为止,这是我的代码:

#include <stdio.h>

int rounding(int roundedNum);
int main()
{
float userNum,
rounded;

printf("\nThis program will round a number to the nearest hundredths\n");
printf("\nPlease enter the number you want rounded\n>");

scanf("%f", &userNum);

rounded = rounding (userNum);

printf("%f rounded is %f\n", userNum, rounded);

return 0;
}

int rounding(int roundedNum)
{


return roundedNum;
}

最佳答案

您的导师可能在想:

float RoundHundredth(float x)
{
// Scale the hundredths place to the integer place.
float y = x * 100;

// Add .5 to cause rounding when converting to an integer.
y += .5f;

// Convert to an integer, which truncates.
int n = y;

// Convert back to float, undo scaling, and return.

return n / 100.f;
}

这是一个有缺陷的解决方案,因为:

  • 大多数 C 实现使用二进制 float 。在二进制 float 中,不可能存储任何不是 2 的负幂的倍数(½、¼、⅛、1/16、1/32、1/64 等)的小数。所以不能准确表示 1/100。因此,无论您进行何种计算,都不可能准确返回 .01 或 .79。你能做的最好的事情就是靠近。

  • 当您对 float 执行算术运算时,结果会四舍五入到最接近的可表示值。这意味着,在 x * 100 中,结果通常不是 x 的 100 倍。由于四舍五入,存在小误差。此错误导致将值推过舍入从一个方向更改为另一个方向的点,因此可能导致答案错误。有一些技术可以避免此类错误,但对于入门类(class)来说太复杂了。

  • 无需转换为整数即可截断; C 有一个内置的浮点截断函数:trunc 用于 doubletruncf 用于 float

  • 此外,在转换为整数时使用截断迫使我们添加 ½ 来取整。但是,一旦我们不再使用到整数类型的转换来获取整数值,我们就可以使用内置函数将浮点值四舍五入为整数值:round for doubleroundf 用于 float

如果您的 C 实现具有良好的格式化输入/输出例程,那么找到四舍五入到最接近的百位的 float 值的一种简单方法是对其进行格式化(与 snprintf 一样)使用转换说明符 %.2f。正确的 C 实现会将数字转换为十进制,小数点后保留两位数字,使用正确的舍入来避免上述算术舍入错误。但是,您将获得字符串形式的数字。

关于c - 如何通过在 C 中转换为 int 来舍入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49001022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com