返回顶部

我想打印一些浮点数,以便它们始终以十进制形式书写(例如12345000000000000000000.0或0.000000000000012345,而不是科学记数法,但我希望结果具有IEEE 754 双精度数的高达 ~15.7 个有效数字,没有了。 理想情况下,float我想要的是结果是位置十进制格式的最短字符串,当转换为. 众所周知,如果指数大于 15 或小于 -4 repr,afloat的 用科学记数法表示: >>> n = 0.000000054321654321 >>> n 5.4321654321e-08 # scientific notation 如果str使用,则结果字符串再次采用科学计数法: >>> str(n) '5.4321654321e-08' 有人建议我可以用format用f标志和足够的精度摆脱了科学计数法: >>> format(0.00000005, '.20f') '0.00000005000000000000' 它适用于该数字,尽管它有一些额外的尾随零。但随后相同的格式失败了.1,这给出了超出浮点数实际机器精度的十进制数字: >>> format(0.1, '.20f') '0.10000000000000000555' 如果我的号码是4.5678e-20,使用.20f仍然会失去相对精度: >>> format(4.5678e-20, '.20f') '0.00000000000000000005' 因此这些方法不符合我的要求。 这引出了一个问题:以十进制格式打印任意浮点数的最简单且性能良好的方法是什么,具有与repr(n)(或str(n)在 Python 3 中)相同的数字,但始终使用十进制格式,而不是科学记数法. 也就是说,例如将浮点值转换0.00000005为字符串的函数或操作'0.00000005';0.1到'0.1'; 420000000000000000.0to '420000000000000000.0'or420000000000000000并将浮点值格式化-4.5678e-5为'-0.000045678'. 赏金期之后:似乎至少有 2 种可行的方法,正如 Karin 证明的那样,与我在 Python 2 上的初始算法相比,使用字符串操作可以显着提高速度。 因此, 如果性能很重要并且需要 Py

什么是Python 中的原始字符串?[凤凰卫视]

正在加载...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152