繁体   English   中英

使用fstream进行数字和截断的C ++精度

[英]C++ precision of numbers and truncation with fstream

我有一个包含数百个数字的file.txt。 它们在该点之后有很多数字(最多20个),我需要全部截断而不用截断它们,否则它们将在以下计算中引入错误。 我用matlab制作了这些数字,所以它具有惊人的精度,但是现在我必须在程序中复制这种行为。

我这样做是这样的:

 fstream in;
 in.open(file.txt, ios::in);
 long double number;
 in>>number;

我也尝试过

 in.precision(20);
 in>>number;

在每次“ >>”操作之前,但没有用

std::numeric_limits::min std::numeric_limits::digits10可以告诉您目标的实际精度为long double

如果发现不足以表示数据,则可能需要任意精度。 您可以使用几个任意精度的数字库,这些库都不是C ++中的标准库。

以下在我的系统(Win7,VS2012)上正常工作:

#include <fstream>
#include <iostream>

int main (void)
{
    std::ifstream file ("test.txt") ;

    long double d = 0 ;
    file >> d ;

    std::cout.precision (20) ;
    std::cout << d << "\n" ;


    return 0 ;
}

文本文件:

2.7239385667867091

输出:

2.7239385667867091

如果这在您的系统上不起作用,则需要使用第三方号码库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM