[英]Converting a float to a double to an integer
我必須創建一個項目,該項目包括計算形成一個數字所需的硬幣數量。 您有誇脫,角錢,鎳幣和幾美分,並且您需要形成一個數量最少的硬幣。 您需要填寫的號碼會提示用戶。
這在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中實現此功能,我遇到了一些麻煩。 我不太了解如何更改用戶提示的浮動。 我需要先將其轉換為兩倍,再乘以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到int的轉換有什么問題嗎? 當用戶提示一個介於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;
沒錯,您需要乘以100,然后轉換為一個int,這就是您在python代碼中所做的,但是在您的C代碼中,您正在反向進行-首先轉換為int,然后乘以100 :
int change = (int) n;
change = change * 100;
(int)強制將值截斷為下一個最小整數,因此n介於0和1之間的值將始終設置為0。
將乘數移動100可確保您在轉換為整數(例如(56))之前,將美元(例如0.56)轉換為美分(例如56.0)的浮點表示形式:
int change = (int) (n * 100);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.