C ++将字符串转换为浮点/双精度而不丢失数据

Mak*_*kka -1 c++ string floating-point

我正在寻找一个字符串转换为浮点数而不会丢失数据的方法。例如,如果我使用istringstream或:: atof(x.c_str()),则由于四舍五入而丢失了数据。

通常,这对我来说不是问题,但我使用的数据必须与读取的数据相同。这是一个数字及其转换成的示例。

-8.000001 -> -8
-0.6257381 -> -0.625738
12.0 -> 12 (drops the .0) 
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我,我将非常感激

谢谢马特

Eri*_*hil 5

您的问题中存在三个潜在问题:

  1. 显示的精度值。要控制使用的精度,请使用#include <iomanip>std::cout << std::setprecision(17);来设置要使用的位数。

  2. 格式化。如果要用“ 12.0”代替“ 12.0”,则应注意“ .0”未存储在float或中double。该double只包含值12; 它不包含有关原始精度或错误间隔的任何信息。恰好是12,仅此而已。如果要以特定方式对其进行格式化,则必须使用I / O流的格式标志,或者编写自己的代码来进行格式化。

  3. 准确性。common floatdoubletype不能完全代表8.000001或0.6257381。它们使用二进制表示浮点值,并且当十进制数字转换为二进制时会出现一些错误。如果您有浮点的非常简单的使用和比的极限数字显著较少的工作floatdouble,那么你可能可以忽略这一点,只需用数字编号的限制数字的格式。如果超出简单的情况,则需要进行错误分析,这可能会非常复杂。