Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ vs2015中给出错误值的标准库到_字符串(双精度)。有什么解决办法吗?_C++_String_C++11_Visual Studio 2015_Stl - Fatal编程技术网

C++ vs2015中给出错误值的标准库到_字符串(双精度)。有什么解决办法吗?

C++ vs2015中给出错误值的标准库到_字符串(双精度)。有什么解决办法吗?,c++,string,c++11,visual-studio-2015,stl,C++,String,C++11,Visual Studio 2015,Stl,在Vs2013中,to_string函数std::to_string(1.0e+30)提供输出10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

在Vs2013中,to_string函数std::to_string(1.0e+30)提供输出10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

在Vs2015中,to_string函数std::to_string(1.0e+30)提供输出10000000000000019884624838656.000000

如果是标准库问题,是否有任何可用的修复程序或修补程序

我在搜索这个问题时遇到了一篇文章 to_字符串在浮点或双精度转换中有错误

double d = 1.0000000000000000e+30;
std::string s = std::to_string(d);
if (s.length())
{
    s;
}
这里给出的值为10000000000000019884624838656.000000

预期结果为10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

有三种浮点类型:
float
double
longdouble
。类型
double
提供的精度至少与
float
相同,类型
long double
提供的精度至少与
double
相同。
float
类型的值集是
double
类型的值集的子集;
double
类型的值集是
long double
类型的值集的子集。浮点类型的值表示由实现定义。[ 注:本文件对浮点运算的精度无任何要求;另请参见- 尾注 ]

VS 2015结果更常见,因为这符合。根据该定义,
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

53位有效位精度提供15到17位有效十进制数字精度

实际上,我很惊讶VS 2013是如何达到
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

有三种浮点类型:
float
double
long double
。类型
double
提供的精度至少与
float
相同,类型
long double
提供的精度至少与
double
相同。类型
float
的值集为
double
类型的值集的子集;
double
类型的值集是
long double
类型的值集的子集。浮点类型的值表示由实现定义[ 注:本文件对浮点运算的精度无任何要求;另请参见- 尾注 ]

VS 2015结果更常见,因为这符合。根据该定义,
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

53位有效位精度提供15到17位有效十进制数字精度

实际上,我对VS 2013如何达到
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

#include <boost/lexical_cast.hpp>

double d = 1.0000000000000000e+30;
std::string s = boost::lexical_cast<std::string>(d);
std:: cout << s;
您还可以使用boost库来避免此问题:

#include <boost/lexical_cast.hpp>

double d = 1.0000000000000000e+30;
std::string s = boost::lexical_cast<std::string>(d);
std:: cout << s;

你试过sprintf_s(..)吗?它会给出同样的结果吗?旁白:你期望
s;
做什么?它也会给出与10000000000000019884624838656.000000相同的输出这里显示的问题是示例代码“每个程序员都应该知道浮点算术”:…虽然您的示例有点特殊,您只有“类似整数”的值,但它仍然是编码为IEEE754的浮点值,所以您只是以一种有点“不人道”的方式达到了该数字类型的极限,但从计算机的角度来看,这一切都是正确的。您尝试过sprintf_s(…)相反?它会给出相同的结果吗?旁白:您希望
s;
做什么?它也会给出与10000000000000019884624838656.000000相同的输出这里显示的问题是示例代码“每个程序员都应该知道浮点算术”:..尽管您的示例有点特殊,您只有“类似整数的”值,但它仍然是编码为IEEE754的浮点值,所以您只是在有点“不人道”的情况下达到了该数字类型的极限是的,但从计算机的角度来看,这一切都是正确的。或者只是
std::cout@Caleth我认为Q要求某种方法将一个大的双精度的值转换成一个字符串,而不仅仅是打印它。错误的主要原因您已经正确地提到了。但这也可以作为解决代码中该问题的一种方法。或者只是
std::cout@Cale我认为Q需要某种方法将一个大的双精度的值转换成一个字符串,而不仅仅是打印它。错误的主要原因您已经正确地提到了。但这也可以作为解决代码中该问题的一种方法。