繁体   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