gpt4 book ai didi

python - 将 float 转换为 double 再转换为整数

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:23 25 4
gpt4 key购买 nike

我必须做一个项目,包括计算组成一个数字所需的硬币数量。您有四分之一、一角硬币、五分硬币和便士硬币,您需要用尽可能少的硬币组成一个数字。您需要填写的号码会提示给用户。

这在 Python 中非常简单(我实现了一个函数来快速执行某些操作):

def calculate_change(change):
count = 0
change*=100
change = int(change)
if change // 25 != 0:
count = change // 25
change = change % 25
if change // 10 != 0:
count += change // 10
change = change % 10
if change // 5 != 0:
count += change // 5
change = change % 5
if change // 1 != 0:
count += change // 1

print count

calculate_change(73)

现在,要在 C 中实现它,我遇到了一些麻烦。我不太明白如何更改用户提示的 float 。我需要先将它转换为 double,乘以 100,然后再转换为 int,但我遇到了麻烦。这是我为此写的:

int main(void)
{
float n;
do
{
printf("Change you need: ");
n = GetFloat();
}
while (n < 0);

n = floorf(n * 100 + 0.5) / 100;

int change = (int) n;
change = change * 100;
int count = 0;

if (change / 25 != 0)
{
count = change / 25;
change = change % 25;
}
if (change / 10 != 0)
{
count = count + change / 10;
change = change % 10;
}
if (change / 5 != 0)
{
count = count + change / 5;
change = change % 5;
}
if (change / 1 != 0)
{
count = count + change / 1;
change = change % 1;
}

printf("%d\n", count);

}

在 C 中从 float 到整数的转换有问题吗?当用户提示 0 到 1 之间的数字时,程序返回不正确的结果(始终为 0)。

谢谢!

最佳答案

问题

n = 0.5时,

floorf(n * 100 + 0.5) / 100 = floorf(50.5)/100 = 50/100 = 0.5

因此,声明

n = floorf(n * 100 + 0.5) / 100;

不改变n的值。现在,当你执行:

int change = (int) n;

change 设置为 0。这解释了为什么对于 0.0-1.0 之间的大多数 n 值,您得到 0

解决方案

我将替换以下行:

n = floorf(n * 100 + 0.5) / 100;

int change = (int) n;
change = change * 100;

n = floorf(n * 100 + 0.5);  // Just to make sure rounding occurs properly.
// Thanks to Mark Ransom.
int change = (int) n;

关于python - 将 float 转换为 double 再转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23704469/

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