[英]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.