这个问题是指 C/x86 上使用的 IEEE 标准浮点数。
是否可以将任何数字(即不包括 NaN 之类的特殊值)浮点数或 double 数表示为十进制字符串,以便将该字符串转换回浮点数/ double 数将始终准确地产生原始数字?
如果不是,什么算法会告诉我给定的数字是否会出现转换错误?
如果是这样,请考虑这一点:一些十进制小数在转换为二进制时,在数值上将与原始十进制值不同,但反之则不然(因为二进制具有有限精度,因此任何十进制扩展都是有限且完美的,如果不是)截断),所以这是另一个问题......
是否有必要在十进制表示中引入故意的错误以欺骗 atof
(或其他)函数产生精确的原始数字,或者是一个天真的,非截断 toString
功能是否足够(假设通常可以进行精确转换)?
最佳答案
根据 this page :
Actually, the IEEE754-1985 standard says that 17 decimal digits is enough in all cases. However, it seems that the standard is a little vague on whether conforming implementations must guarantee lossless conversion when 17 digits are used.
所以存储一个
double
作为具有至少 17 位数字(正确四舍五入)的十进制字符串将保证它可以转换回二进制 double
没有任何数据丢失。换句话说,如果每个可能的 double 值都被转换为 17 位的十进制字符串(正确四舍五入),它们都将映射到不同的值。因此没有数据丢失。
不过,我不确定单精度的最小截止值。但我怀疑它将是 8 或 9 位数字。
关于string - 浮点到字符串的无损转换并返回 : is it possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990454/