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