如何在C ++ Calculator中将大数字表示为小数点后两位

时间:2015-04-25 05:16:18

标签: c++ floating-point decimal calculator decimal-precision

我正在尝试用C ++编写一个计算器来执行/,*, - 或+的基本功能,并显示两个小数位的答案(精度为0.01)。

例如,var base64 = "data:image/jpeg;base64,/9j/4AAQSkZJ....."; var canvas = document.createElement('canvas'); var ctx = canvas.getContext("2d"); var image = new Image(); image.onload = function () { canvas.width = this.naturalWidth; canvas.height = this.naturalHeight; ctx.drawImage(this, 0, 0); }; image.src = base64; $('#showImage').html(canvas); 应将结果打印为100.1 * 100.1,但我会得到10020.01。根据我的理解,这来自溢出,但这就是我首先选择-4e-171的原因!

long double

4 个答案:

答案 0 :(得分:4)

setprecision告诉它您想要int的小数位数,因此setprecision(0)被截断后,您实际将其设置为0.01。在您的情况下,您希望它设置为2.您还应该使用std::fixed或者您将获得科学数字。

void printResult(long double x)
{
    cout << "The answer is: " << std::fixed << setprecision(2) << x << "\n";
}

working example

答案 1 :(得分:2)

这不是因为溢出而得到了奇怪的结果。双打可轻松保存您所显示范围内的数字。

尝试在没有setprecision的情况下打印结果。

编辑: 尝试后

long double x = 100.1;
cout << x << endl;

我发现它在我的Windows系统上无效。

所以我搜索了一下,发现:

print long double on windows

也许这就是解释。

所以我试过

long double x = 100.1;
cout << (double)x << endl;

工作得很好。

第二次编辑:

另见Raphael提供的链接

http://oldwiki.mingw.org/index.php/long%20double

答案 2 :(得分:2)

默认浮点演示文稿会在314.153.1e2等演示文稿之间自动切换,具体取决于数字的大小和可以使用的最大位数。使用此演示文稿,精度是最大位数。默认情况下是6。

您可以增加最大位数,以便您的结果可以显示为314.15,也可以使用std::fixed操纵器强制使用此类固定点表示法。使用std::fixed时,精度是小数位数。

但是,std::fixed非常大且非常小的数字可能非常难以理解。

答案 3 :(得分:1)

setprecision()操纵器指定小数点后的位数。因此,如果您希望打印100.01,请使用setprecision(2)

当您使用setprecision(0.01)时,值0.01正在转换为int,其值为0

如果您实际阅读了setprecision()的文档,那就不会有什么坏处 - 它明确指定了int参数,而不是浮点数。