C++ stod:字符串到浮点转换是否一致

C++ stod: Is the string to float conversion consistent

本文关键字:转换 是否 stod 字符串 C++      更新时间:2023-10-16

给定两个不同的字符串string s1并且string s2包含相同的十进制数,小数点后尾随零的数量不同,是否始终保证stod(s1)==stod(s2)

例如:

#include<iostream>
using namespace std;
bool equalConversion(const string& s1,const string& s2)
{
return stod(s1)==stod(s2);
}
int main(int argc, char *argv[])
{
string s1="0.1232340";
string s2="0.12323400";
cout<<"equal conversion: "<<equalConversion(s1,s2)<<endl;
return 0;
}

我尝试对s1s2使用不同的值,似乎是这样,但也有很强的保证,特别是对于数字非常大或很小的字符串,这些字符串不能完全表示为双精度值,因此将四舍五入到下一个可表示的双精度值。如果最小的较大和最大的较小可表示值与字符串中的目标数字相距相等,该怎么办?尾随零是否会干扰转换函数stod,即使用额外的尾随零时,选择的双精度表示与没有它们的双精度表示不同?换句话说:从字符串到双精度的转换是否一致

C(因为至少C99)指定了对IEC 60559(IEEE 754)的可选支持。 如果实现定义了__STDC_IEC_559__(当前的GCC和Clang似乎定义了这些规则,至少如果包含math.h),那么它必须遵循使浮点运算更可靠的其他规则。 其中之一是(最多DECIMAL_DIG位数字,对于大多数现代实现来说至少为 17 位)strtod正确舍入,这意味着对问题的肯定答案。