簡體   English   中英

從math.h舍入不正確

[英]Rounding from math.h incorrect

我正在使用代碼修道院上的任務來通過C ++進行工作。 我正在嘗試通過導入math.h使用舍入函數,並且當我將4991264除以4並將其舍入時,它適用於我嘗試輸入的每個值(一對輸入除外),它將輸出為1.24782e + 06

 #include <iostream>
#include <math.h>
using namespace std;

int getTotal(){
int total;
cin >> total;
return total;
}

void doMath(int total){
    int count;
    double holder;
    double holder2;
    double solution;
    solution = 0;
    count = 0;
    while (count != total){
        cout << "enter a number ";
        cin >> holder;
        cout << "enter a number ";
        cin >> holder2;
        solution = (holder / holder2);
        cout << round(solution) << "\n";
        ++count;
}

}
int main(){

int total = getTotal();
doMath(total);


return 0;
}

http://ideone.com/f40E1s是代碼和輸入。

謝謝,

浮點變量保留給定類型的值(在內存中)。
該值以自己的精度“停留”在二進制格式上。
當必須以某種方式顯示或輸出此值時,通常將其轉換為十進制格式。 這種轉換有時會失去精度。

無論如何,當您在進行精確的算術運算時(例如您的示例),通常到十進制的轉換不是問題。
這里必須理解的是,“打印”一個值與“顯示存儲在內存中的確切值”不同。

對象cout具有預定義的方式來顯示您正在計算的值。
確切的值沒有改變, 在這種情況下,這不是計算錯誤的問題
確實, 這只是如何在屏幕上顯示此值的問題

用於打印值的格式為: 以指數表示法,“僅” 6個十進制數字精度

您需要提高數值在打印時的精度,並避免使用指數表示法。

看一下這個網站: C ++中的輸出格式

因此,例如,以下代碼完成了這項工作(精度為8個十進制數字):

  cout << setiosflags(ios::fixed) << setprecision(8) << round(solution) << "\n";

通常,您必須研究和實踐有關此格式選項的更多信息。

暫無
暫無

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

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