繁体   English   中英

解析(浮点)数字时使用什么信息?

[英]What information is used when parsing a (float) number?

解析(浮点)数字时,C ++标准库使用哪些信息?

这是我知道的用std c ++解析(单个)浮点数的可能性:

看来, 至少 ,我们必须知道什么字符用作小数点分隔符。

iostreams,尤其是num_get::get此外还讨论:

  • ios_base I / O格式标志- 解析浮点时,这里是否使用任何信息?
  • thousands_sep arator( 见下面

另一方面,在std::strtod ,这似乎是sscanf所定义的(依次由num_get引用),那里唯一的变量信息似乎是被认为是空格和十进制字符的信息,尽管似乎没有在定义位置指定 (至少在cppref或MSDN上都没有。)

那么,实际上使用了哪些信息,什么构成了C ++ Standard库的有效可解析浮点表示形式?

从我所看到的,仅需要全局( CC++ ???)中的小数点分隔符,此外,如果数字包含千位分隔符,我希望它只能由num_get正确解析,因为strod / sscanf不支持千位​​分隔符。


(*)组(千位)分隔符对我来说是一个有趣的案例。 据我所知,“ C ”函数没有对其进行任何引用,并且上次我检查CC++标准printf函数将永远不会编写它。 那么它真的是由strtod / scanf函数处理的吗? (我知道组分隔符有一个POSIX printf扩展名,但这并不是真正的标准,尤其是在Microsoft的实现中缺少。)

C11的strtod()规范似乎有足够大的开口,可让任何大小的卡车驶过。 它似乎是开放式的,我认为没有限制。

§7.22.1.36在“ C”语言环境之外,还可以接受其他特定于语言环境的主题序列形式。


对于非“标准C”语言环境, isspace() ,十进制(基数)点,组分隔符,每组位数和符号似乎构成了典型的变体。 但是显然没有限制。


使用printf()sscanf()strftime()isspace()在500多个语言环境中进行了有趣的实验

所有测试的语言环境的基数(小数点)均为'.' ',' ,相同的+/-号,无数字分组以及预期的0-9。

在1000-99999年内, strftime(... "%Y" ...)未使用数字分隔符。

sscanf("1,234.5", "%lf", ..sscanf("1.234,5", "%lf", ..在任何语言环境中均不会产生1234.5。

0到255范围内的所有int值都产生相同的isspace()结果,有时是154和160例外。

当然,这些测试并不能证明可能会发生什么,但确实代表了一种可能性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM