我可以从具有不同数字分隔符的 istream 中读取双精度值吗?
Can I read double values from istream that have different digit separator?
我想在我的程序中从不同的文本文件中读取双精度值。有些文件包含 'xx.yyy' 格式的双精度数(点是分隔符),但其他一些文件 - 'xx,yyy'(逗号是分隔符)。我使用 C++ 流进行阅读。
如果您提前知道每个文件的格式,您可以 imbue()
a std::ifstream
with a custom std::locale
whose std::numpunct
facet specifies the desired thousands_sep
and decimal_point
characters. Then operator>>
将能够按预期解析 double
值。
有关如何指定自定义 decimal_point
,请参阅 How can I set the decimal separator to be a comma?。同样的方法也适用于 thousands_sep
。
如果您提前不知道格式,则必须先将 double
作为字符串读取,然后手动解析它们以确定它们使用的格式,然后您可以 imbue()
a std::istringstream
然后将字符串转换为 double
。如果给定文件中的所有 double
使用相同的格式,那么您可以对第一个 double
执行此操作,然后根据需要对 imbue()
std::ifstream
执行后续 double
s.
我想在我的程序中从不同的文本文件中读取双精度值。有些文件包含 'xx.yyy' 格式的双精度数(点是分隔符),但其他一些文件 - 'xx,yyy'(逗号是分隔符)。我使用 C++ 流进行阅读。
如果您提前知道每个文件的格式,您可以 imbue()
a std::ifstream
with a custom std::locale
whose std::numpunct
facet specifies the desired thousands_sep
and decimal_point
characters. Then operator>>
将能够按预期解析 double
值。
有关如何指定自定义 decimal_point
,请参阅 How can I set the decimal separator to be a comma?。同样的方法也适用于 thousands_sep
。
如果您提前不知道格式,则必须先将 double
作为字符串读取,然后手动解析它们以确定它们使用的格式,然后您可以 imbue()
a std::istringstream
然后将字符串转换为 double
。如果给定文件中的所有 double
使用相同的格式,那么您可以对第一个 double
执行此操作,然后根据需要对 imbue()
std::ifstream
执行后续 double
s.