无论计算与否,浮点数还是存在不能精确转换为字符串的问题,比如你输入-1.1499999时,不计算的输出会是-1.1500000.
估计根据浮点数的表示格式做智能判断可做到90%的正确。以double类型为例(c语言的double标准):c double类型以52位2进制位表示53位有效位(最高位恒为1),因此最高精度数为2^52约为4.5*10^16,大致可理解为小数点后15个有效位,通过判断从第15位开始往左判断,连续的9则对不为9的数进一位,连续的0则舍弃。
输入 double
-1.15 -1.149999999999999 连续13个9,则对小数点后15-13=2个数4进位为5,转换结果即-1.15
-1.149999 -1.149998999999999 连续10个9,则对小数点后15-9=6个数8进位为9,转换结果即-1.149999
-1.11 -1.110000000000000 连续13个0,舍弃,转换结果为-1.11
-1.13 -1.129999999999999 连续13个9,则对小数点后15-13=2个数2进位为3,转换结果即-1.13
估计根据浮点数的表示格式做智能判断可做到90%的正确。以double类型为例(c语言的double标准):c double类型以52位2进制位表示53位有效位(最高位恒为1),因此最高精度数为2^52约为4.5*10^16,大致可理解为小数点后15个有效位,通过判断从第15位开始往左判断,连续的9则对不为9的数进一位,连续的0则舍弃。
输入 double
-1.15 -1.149999999999999 连续13个9,则对小数点后15-13=2个数4进位为5,转换结果即-1.15
-1.149999 -1.149998999999999 连续10个9,则对小数点后15-9=6个数8进位为9,转换结果即-1.149999
-1.11 -1.110000000000000 连续13个0,舍弃,转换结果为-1.11
-1.13 -1.129999999999999 连续13个9,则对小数点后15-13=2个数2进位为3,转换结果即-1.13
能编个毛线衣吗?