python 中 float 和 decimal 的区别

python 复制代码
# 使用 Decimal 类型进行计算
from decimal import Decimal

total_float = 0.1 + 0.2
total_decimal = Decimal('0.1') + Decimal('0.2')
print("[0.1 + 0.2] 使用 float 类型进行计算:", total_float)      # 输出可能是 0.30000000000000004,而不是期望的 0.3
print("[0.1 + 0.2] 使用 Decimal 类型进行计算:", total_decimal)
print()
print("[1.23 ÷ 0.1] 使用 float 类型进行计算:", (1.23 / 0.1) )   # 输出可能是 12.299999999999999 而不是期望的 12.3
print("[1.23 ÷ 0.1] 使用 Decimal 类型进行计算:", Decimal('1.23') / Decimal('0.1'))
print("[1.23 ÷ 0.1] 使用 float ->转成-> Decimal 类型进行计算:", Decimal(1.23) / Decimal(0.1))
print()
print("[1.23 + 0.1] 使用 float 类型进行计算:", (1.23 + 0.1))   # 这个可以正常输出1.33,
print("[1.23 + 0.1] 使用 Decimal 类型进行计算:", (Decimal('1.23')+Decimal('0.1')))
特点 Decimal float int
数据类型 十进制浮点数 二进制浮点数 整数
精度 高精度,适用于金融计算 有限精度,可能会存在精度损失 无限精度
精确性 提供精确的计算结果 可能会存在舍入误差 精确,没有小数部分
运算速度 比 float 类型稍慢 比 Decimal 类型稍快 最快
内存消耗 比 float 类型稍大 比 Decimal 类型稍小 最小
使用情景 金融应用、精确计算 科学计算、数据分析 计数、索引和简单运算
Decimal('0.1') 跟 Decimal(0.1) 等效吗?

答:

不完全等效。

  • Decimal('0.1'):使用字符串表示的十进制数,可以确保精确地创建 Decimal 对象,因为字符串会被解析为准确的数字。
  • Decimal(0.1):使用浮点数表示的十进制数,由于浮点数本身可能存在精度损失,因此在创建 Decimal 对象时,可能会出现精度损失或不精确的情况。

因此,推荐使用字符串表示法 Decimal('0.1') 来确保精确性。

相关推荐
知乎的哥廷根数学学派几秒前
基于物理约束指数退化与Hertz接触理论的滚动轴承智能退化趋势分析(Pytorch)
开发语言·人工智能·pytorch·python·深度学习·算法·机器学习
长路归期无望几秒前
一步步入门机器人【Arduino基础】
开发语言·经验分享·笔记·学习·机器人
Ethan Hunt丶几秒前
基于Pytorch预训练模型实现声纹识别系统
人工智能·pytorch·python·语音识别
源文雨2 分钟前
批量递归转换 mp4 为 flac/m4a 的 bash 脚本
开发语言·ffmpeg·bash·转码·mp4·m4a·flac
不绝1914 分钟前
C#进阶:协程与事件
开发语言·c#
feifeigo1235 分钟前
斜激波参数计算MATLAB程序
开发语言·matlab
小小前端--可笑可笑6 分钟前
【Three.js + MediaPipe】视频粒子特效:实时运动检测与人物分割技术详解
开发语言·前端·javascript·音视频·粒子特效
奔跑的web.6 分钟前
JavaScript 对象属性遍历Object.entries Object.keys:6 种常用方法详解与对比
开发语言·前端·javascript·vue.js
古城小栈9 分钟前
Rust 模式匹配 大合集
开发语言·后端·rust
Katecat9966312 分钟前
【铁路检测】YOLO11-C3k2-StripCGLU模型在铁路轨道缺陷检测中的应用与改进
python