[英]Float is printf wrong value
我還有另一個浮點輸出問題,打印“ 1.#R”,我將其范圍縮小到重復出現的值,所以我的問題是如何將值四舍五入到小數點后兩位,所以我可以打印該值(但不能使用“ %.2f“)。 這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
void tax_deduction( float *total)
{
float taxpercent = 1.20;
float nationalInsurance = 1.175;
*total = *total - 9000;
*total = *total / taxpercent;
*total = *total / nationalInsurance;
*total = *total + 9000;
}
void hourly_rate(float *rate)
{
int weeks = 52;
float hours = 37.5;
*rate = *rate /(float)weeks;
*rate = *rate /hours;
}
int main()
{
float wages;
float hours = wages;
printf("Please enter your wage: \n");
scanf("%f",&wages);
if(wages > 9000){
tax_deduction(&wages);
}
hourly_rate(&hours);
printf("wages after tax and NI: %.2f\n", wages);
printf("wages per month: %.2f\n", wages / 12);
printf("hourly rate: %.2f\n", hours);
return 0;
}
運行hourly_rate函數后,它的顯示方式存在問題,例如當我在底部將其編碼為printf(“ hourly rate:%.2f \\ n”,(wages / 52)/ 37/5 ); 它可以工作,但這並不是我真正想要的編碼方式。
有人能想到為什么它不能正常工作嗎?
您的問題不是printf
。 您的問題是由於對未初始化的值的使用,導致代碼的算法不正確。
float wages; // wages not initialized
float hours = wages; // hours assigned that uninitialized value
printf("Please enter your wage: \n");
scanf("%f",&wages);
if(wages > 9000){
tax_deduction(&wages);
}
hourly_rate(&hours); // hours still not initialized
您無法初始化hours
。
我的猜測是,您的意思是看完wages
后要初始化hours
。 因此,將分配移動到hours
到代碼中正確定義wages
一點。
float wages;
printf("Please enter your wage: \n");
scanf("%f",&wages);
if(wages > 9000){
tax_deduction(&wages);
}
float hours = wages;
hourly_rate(&hours);
您得到的奇怪輸出是使用%.2f
格式打印浮點NaN的結果。 我還建議您將if(wages > 9000)
測試tax_deduction
。 就像您目前所擁有的那樣,那部分減稅代碼已泄漏到調用代碼中。
是的,因為在將值讀入工資之前,您設置hours = wages
工資。 這些是設置為相等的值,而不是引用。
如果在scanf行之后插入小時數=工資,它將起作用。
此外,就編碼風格而言,在像這樣的簡單情況下,大多數程序員更喜歡使用函數的返回值,而不是發送指向已修改值的指針。 這絕不是普遍的,但可能是一個好主意。
要添加有關未初始化變量的其他答案:
您的printf()
正在嘗試打印1.#QNAN
(大概是因為未初始化變量的值恰好是“安靜的NAN”)。 但是精度沒有足夠的空間,因此1.#QNAN
字符串被“舍入”為1.#R
。 有關此現象的詳細信息,請參閱以下文章:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.