首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立于语言环境的strtod实现

独立于语言环境的strtod实现
EN

Stack Overflow用户
提问于 2010-01-03 19:13:35
回答 4查看 5.9K关注 0票数 9

我有一个库,它需要解析始终使用点‘’的双精度数。作为小数分隔符。不幸的是,对于这种情况,strtod()遵守可能使用不同分隔符的区域设置,因此解析可能会失败。我无法设置setlocale() -它不是线程安全的。所以我现在正在寻找一个干净的、独立于语言环境的strtod实现。到目前为止,我已经发现了多个实现,但它们看起来都很粗糙,或者就像是糟糕的代码。有人能为我推荐一个经过良好测试、工作正常、干净的(ANSI) C实现吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-03 20:09:04

获取一些已知的实现(不依赖于ruby),比如使用ruby:ruby_1_8/missing/strtod.c分发的实现。

票数 3
EN

Stack Overflow用户

发布于 2012-02-14 17:51:58

警告:来自ruby的建议实现包含错误。我不介意gavin指出的小差异,但是如果您尝试解析像"0.000000000000000000000000000000000000783475“这样的东西,您将得到0.0而不是7.834750e-37 (像股票strtod()返回)。

其他解决方案:

代码语言:javascript
复制
#include <sstream>
#include "strtod_locale_independent.h"

extern "C" double strtod_locale_independent(const char* s)
{
     std::istringstream text( s );
     text.imbue(std::locale::classic());
     double result;
     text >> result;
     return result;
}

不过,我不知道这有多快。

票数 3
EN

Stack Overflow用户

发布于 2011-08-03 18:02:49

按照上面的答案,我尝试在ruby_1_8/missing/strtod.c上使用Ruby实现。然而,对于一些输入,这给出了不同的答案,无论是在Mac上还是在Linux平台上,这都是对gcc的内置解析器和stdlib.h中的strtod的回答:

代码语言:javascript
复制
char * endptr ;
double value1 = 1.15507e-173 ;
double value2 = strtod( "1.15507e-173", &endptr ) ;
double value3 = test_strtod( "1.15507e-173", &endptr ) ;
assert( sizeof( double ) == sizeof( unsigned long ) ) ;
printf( "value1 = %lg, 0x%lx.\n", value1, *(unsigned long*)( &value1 ) ) ;
printf( "value2 = %lg, 0x%lx.\n", value2, *(unsigned long*)( &value2 ) ) ;
printf( "value3 = %lg, 0x%lx.\n", value2, *(unsigned long*)( &value3 ) ) ;
assert( value1 == value2 ) ;
assert( value1 == value3 ) ;

哪种打印

代码语言:javascript
复制
value1 = 1.15507e-173, 0x1c06dace8bda0ee0.
value2 = 1.15507e-173, 0x1c06dace8bda0ee0.
value3 = 1.15507e-173, 0x1c06dace8bda0edf.
Assertion failed: (value1 == value3), function main, file main.c, line 16.

因此,我的建议是在使用之前测试所选的实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1994658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档