草庐IT

str2double

全部标签

c++ - double to hex string & hex string to double

我要做的是将double字符串转换为十六进制字符串,然后再转换回double。以下代码将double字符串转换为十六进制字符串。char*double2HexString(doublea){char*buf=newchar[17];//doubleis8-bytelong,sowehave2*8+terminating\0char*d2c;d2c=(char*)&a;char*n=buf;inti;for(i=0;i这似乎可行,但是,我不确定如何将生成的字符串转换回double字符串。请指教:) 最佳答案 我很惊讶地看到没有人提出标

C++ double 到 long long

如果我用c++写代码:longlongd=999999998.9999999994;cout我得到输出:999999999(四舍五入)但是这段代码的输出:longlongd=999999998.9999994994;cout是999999998(向下舍入)跟精度有关系吗?有什么办法可以改变精度。floor()函数也给出相同的输出。我还注意到,如果我将值8.9999994994或8.9999999994分配给d(上述变量)。输出为8。 最佳答案 999999998.9999999994不能用double精确表示,因此实际值是99999

c++ - 字符串::c_str 查询

调用string::c_str()返回的指针指向哪里?在下面的代码片段中,我以为我会给出一个段错误,但它给了我正确的输出。如果string::c_str()返回的指针指向字符串对象内部的一个内部位置,那么当函数返回并调用对象析构函数时,我应该得到无效的内存访问。#include#includeusingnamespacestd;constchar*func(){stringstr("test");returnstr.c_str();}intmain(){constchar*p=func();cout 最佳答案 Wheredoesth

c++ - double /整数模板函数的 vector

我想概括一个函数。简单地说,我有一个std::strings我用生成std::vector的解析器处理(它是一个列表,如"1,2,3"),函数应该返回一个std::vector。,与T限于double或int.vector应包含转换后的值。我坚持使用std::transform的最后一个参数,因为它应该在std::stod之间切换和std::stoi.我正在寻找的解决方案是使用模板元编程魔法,而不是if(std::is_same::value).有什么提示吗?templateautoget_vector(std::strings)->std::vector{std::vectorv;a

c++ - 如何检查 double 是否有小数部分?

基本上我有两个变量:doublehalfWidth=Width/2;doublehalfHeight=Height/2;因为它们被除以2,所以它们要么是整数,要么是小数。我如何检查它们是整数还是.5? 最佳答案 您可以使用modf,这应该足够了:doubleintpart;if(modf(halfWidth,&intpart)==0){//yourcodehere} 关于c++-如何检查double是否有小数部分?,我们在StackOverflow上找到一个类似的问题:

c++ - 链接器错误 - 带有 libboost_thread 的 macOS 上 undefined symbol std::string::c_str() const?

我从homebrew安装了boost1.55.0在macos小牛队上。获取链接器异常-找不到std::string::c_str(),我不明白为什么。这可能是Homebrew软件的问题吗?我尝试直接从boost编译boost1.55.0,它甚至没有在macOS上构建。这段代码:#include#include#include#includetypedefstd::unordered_mapStringMap;staticboost::thread_specific_ptr>rlist;intmain(){return0;}使用此命令行编译:g++-std=c++11main.cpp-I

c++ - 从 double 截断到 float?

#includeusingnamespacestd;intmain(void){floathaha[2];float(&ptr)[2]=haha;ptr[0]=0.54;ptr[1]=0.65;cout我目前正在使用入门C++学习复杂的数组声明,在我的代码中,我收到警告说WarningC4305'=':truncationfrom'double'to'float'Arrayforbothptr[0]和ptr[1]出于某种原因,但我在任何地方都看不到double,但当我将代码修改为ptr[0]=(float)0.54;ptr[1]=(float)0.65;我似乎没有警告谁能解释为什么?提

c++ - x86-64 长 double

longdouble在Intel64位平台上的实际精度是多少?是80位填充到128位还是实际的128位?如果是前者,除了gmp之外,还有其他选择可以实现真正的128精度吗? 最佳答案 x86-64精度与常规x86相同。扩展double为80位,使用x87ISA,添加了6个填充字节。没有128位FP硬件。不过,四精度或扩展四精度的软件实现可能会受益于x86-6464x64=>128整数乘法指​​令。 关于c++-x86-64长double,我们在StackOverflow上找到一个类似的问

c++ - Windows 和 Linux 中 C++ 中 double 的精度位数不同。为什么? Linux显示超过20个非零精度数字

刚刚做了这个:doubleval1=numeric_limits::max();cout.precision(70);cout在Windows中,我在17位数字(小数点后16位数字)后开始得到0。然而在Linux中,当我不断增加cout.precision(NUMBER)时,越来越多的数字不断显示并且它们不是零。此外,运行以下代码在Windows和Linux上都会显示“15”。Windows系统是32位的,Linux系统是64位的,如果有区别的话。typedefstd::numeric_limitsdl;cout谁能帮忙解释一下这是怎么回事?我认为Windows和Linux中的精度位数

c++ - 当字符串超出范围时,将 string::c_str() 分配给 const char*

我对基本的C++用法有疑问。下面的代码使用gcc/LInux编译,打印正确。字符串test超出范围,所以它的c_str()值也应该无效,不是吗?我错了还是我误解了constchar*的意思?#includeintmain(){constchar*a="aaaa";std::cout 最佳答案 你是对的,你的代码无效,因为它使用了一个生命周期已经结束的对象。它是“偶然”起作用的,你不能依赖它。 关于c++-当字符串超出范围时,将string::c_str()分配给constchar*,我们