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)
如果有人可以帮助我,我将非常感激
谢谢马特
您的问题中存在三个潜在问题:
显示的精度值。要控制使用的精度,请使用#include <iomanip>和std::cout << std::setprecision(17);来设置要使用的位数。
格式化。如果要用“ 12.0”代替“ 12.0”,则应注意“ .0”未存储在float或中double。该double只包含值12; 它不包含有关原始精度或错误间隔的任何信息。恰好是12,仅此而已。如果要以特定方式对其进行格式化,则必须使用I / O流的格式标志,或者编写自己的代码来进行格式化。
准确性。common float和doubletype不能完全代表8.000001或0.6257381。它们使用二进制表示浮点值,并且当十进制数字转换为二进制时会出现一些错误。如果您有浮点的非常简单的使用和比的极限数字显著较少的工作float和double,那么你可能可以忽略这一点,只需用数字编号的限制数字的格式。如果超出简单的情况,则需要进行错误分析,这可能会非常复杂。