
1 king1101 2019-04-10 16:01:01 +08:00 这些错误是由底层 CPU 和 IEEE 754 标准通过自己的浮点单位去执行算术时的特征。由于 Python 的浮点数据类型使用底层表示存储数据,因此你没办法去避免这样的误差。如果想要精确一点的话,可以使用 decimal 模块。(摘自 Python Cookbook ) |
2 xiaoheijw 2019-04-10 16:01:41 +08:00 python 默认的是 17 位小数的精度,前 16 位是准确的,第 17 位开始不准确 |
3 momo1999 2019-04-10 16:04:28 +08:00 基础不牢固啊 |
4 shintendo 2019-04-10 16:1:44 +08:00 这不是 python 的 bug,而是几乎所有主流编程语言(使用 IEEE 754 格式存储浮点数)都有的问题 其本质原因是,在十进制里能精确表示的小数,用二进制不一定能精确表示 |
5 justou 2019-04-10 16:19:49 +08:00 每隔一段时间 python 都要出一个这种 bug 这是好事, 说明玩蛇的队伍一直都在壮大 |
6 wly19960911 2019-04-10 16:25:47 +08:00 https://www.guokr.com/article/27173/ 看这篇就好了。主要是真实值展示和二进制存储存储的差异问题。 |
7 hmzt 2019-04-10 18:15:57 +08:00 看来 c 语言作为入门语言还是很必要的,hh |
8 shawndev 2019-04-10 18:17:14 +08:00 这是浮点数的 bug,如果嫌计算不准确,听说可以试一试 fortran |
9 jhsea3do 2019-04-10 18:29:10 +08:00 nodejs 下有一款 big.js 很好用 python 下用 numpy 可以 import numpy as np np.multiply(4.8, 1.2) |
10 vcgo 2019-04-10 18:29:44 +08:00 浮点数运算丢失精度,不只是 Python,很多编程语言都是这样。 |
![]() | 12 whoami9894 2019-04-10 18:48:05 +08:00 via Android 是的,这是解释器的 bug,楼主快去社区反馈 |
13 mmdsun 2019-04-10 18:54:37 +08:00 via Android 快去恶补基础。不止是 py 不少语言都丢精度。 高精度运算比如价格:可以库里存分。用 long 或者整数小数分开处理。 java 可以用大数类运算。 |
14 tcitry 2019-04-10 20:03:37 +08:00 看看小数点后的二进制表示法? |
15 nikolai 2019-04-10 20:09:07 +08:00 |
16 fan2006 2019-04-11 06:43:36 +08:00 from decimal import Decimal print(Decimal('4.8')*12) |
17 Qzier 2019-04-12 13:46:12 +08:00 via iPhone 与编程语言无关,与计算机浮点数的表示有关。 |