簡體   English   中英

如何解決將我的花車四舍五入到兩倍的問題?

[英]How can I fix my floats being rounded down to doubles?

我知道在C語言中默認情況下,當您聲明浮點數時,它會自動保存為double值;如果希望將其保存為浮點數,則必須這樣聲明它

float x = 0.11f

但是如果我的x值來自scanf怎么辦? 如何做到在打印時不會四舍五入? 這是我的代碼順便說一句,謝謝您的幫助。

#include <stdio.h>

int main() {
  float number = 0;
  float comparison;

  do{
    printf("\nEnter a number: ");
    scanf("%f", &comparison);

    if(comparison > number) {
    number = comparison;
    }
  }while(comparison > 0);

  printf("The largest number enteres was: %f\n\n", number);

}

如果我的x值來自scanf怎么辦? 如何做到在打印時不會四舍五入?

使用%f指令的scanf將讀取輸入並將其轉換為float (而不是double )。 如果匹配的文本與精確地表示為float的數字不對應,則在此階段進行四舍五入。 沒有替代。

當你傳遞float類型的一個參數printf()進行打印, 它將被提升到鍵入double 該功能的簽名要求這樣做。 但是double類型可以完全表示float類型的所有值 ,因此此升級不涉及任何舍入。 printf%f指令的處理與此自動升級保持一致:對應的(升級的)參數的類型應為double

確切地再現輸入有多種途徑,具體取決於您願意對該輸入施加什么約束。 最通用的方法是以字符串形式讀取,存儲和打印數據,盡管這有其復雜性。

如果您願意對支持逐字復制的最大十進制范圍和精度進行限制,則可以通過在printf字段指令中指定精度來將輸出舍入為與輸入相同的表示形式:

float f;
scanf("%f", &f);
printf("%f %.2f %5.2f\n", f, f, f);

如果要使用內置的浮點格式,並且還避免附加尾隨零,則可能需要像這樣的顯式精度或%g指令:

printf("%f %g\n", f, f);

還涉及其他替代方法,例如創建定點或任意精度的十進制數據類型,以及用於讀寫數據類型的適當函數。 我認為這超出了您目前感興趣的范圍。


注意 :“ double”是“ double precision”的縮寫,與單精度“ float”相反。 就存儲和表示能力而言,前者是較大的類型。 在實際的實現中,從floatdouble從來沒有任何“舍入”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM