将字符串转换为 double 后 return 值不正确?
After converting string to double getting incorrect return value?
我正在尝试将字符串转换为双精度。转换后我得到一个不正确的值。例如,如果我发送“12.345678”,在转换为 double 后变量的值为 1.2345678。在 Cygwin 中,这段代码运行良好。我正在尝试在嵌入式 CS+(瑞萨微)编译器中 运行 这段代码。在那里我没有得到正确的值。为什么?
这是我的代码:
double str_to_double_func(char str[])
{
double result = 0.0;
int len = 0;
int pos = 0, n;
while(str[len]!='[=11=]'){
len++;
}
for (n = 0; n < len; n++)
{
if (str[n] == '.')
{
pos = len - n - 1;
}
else
{
result = result * 10.0f + (str[n]-'0');
}
}
while ( pos--)
{
result = result/10.0f;
}
return result;
}
这里的问题是在我的 CS+(Renesas micro)编译器中得到 1.234567800000000E+001 而不是 12.345678。我用 Cygwin 编译器检查了这段代码。我得到了正确的输出。
变量this保持值
result 1.234567800000000E+001
E+001
后缀是指数形式或 scientific notation,意思是 "x101"。 1.2345678 x 101 与 12.345678 的值 相同。问题不在于 result
中的值,而在于您呈现或阅读结果的方式。
如果这是在调试器中显示的值,那么这就是调试器显示此类值的方式,您没有问题。如果这是您的代码作为字符串输出的值,那么它是输出方式而不是发布的代码有问题。
我正在尝试将字符串转换为双精度。转换后我得到一个不正确的值。例如,如果我发送“12.345678”,在转换为 double 后变量的值为 1.2345678。在 Cygwin 中,这段代码运行良好。我正在尝试在嵌入式 CS+(瑞萨微)编译器中 运行 这段代码。在那里我没有得到正确的值。为什么?
这是我的代码:
double str_to_double_func(char str[])
{
double result = 0.0;
int len = 0;
int pos = 0, n;
while(str[len]!='[=11=]'){
len++;
}
for (n = 0; n < len; n++)
{
if (str[n] == '.')
{
pos = len - n - 1;
}
else
{
result = result * 10.0f + (str[n]-'0');
}
}
while ( pos--)
{
result = result/10.0f;
}
return result;
}
这里的问题是在我的 CS+(Renesas micro)编译器中得到 1.234567800000000E+001 而不是 12.345678。我用 Cygwin 编译器检查了这段代码。我得到了正确的输出。
变量this保持值
result 1.234567800000000E+001
E+001
后缀是指数形式或 scientific notation,意思是 "x101"。 1.2345678 x 101 与 12.345678 的值 相同。问题不在于 result
中的值,而在于您呈现或阅读结果的方式。
如果这是在调试器中显示的值,那么这就是调试器显示此类值的方式,您没有问题。如果这是您的代码作为字符串输出的值,那么它是输出方式而不是发布的代码有问题。