Python 3.14 中,Decimal.from_float(0.1) 转换的是变量 0.1 已经形成的二进制浮点值,而不是最初输入的十进制文本“0.1”。二进制浮点无法精确表示十进制 0.1,保存下来的是最接近的可表示值,即 0x1.999999999999ap-4;把这个已有浮点值精确展开为十进制,就是 一个略大于十进制 0.1 的长小数,而不是恰好等于十进制 0.1。因此它不会自动变成只有一位小数的 0.1。Decimal('0.1') 走的是从十进制字符串构造的路径,两者结果不同;提高 precision 也不应被当作把丢失的十进制输入重新找回来的办法。

适用:在重庆渝中区台式电脑上核对 Python 3.14 相关行为时,可先确认解释器确实是 Python 3.14,并明确比较对象是 float 值经 Decimal.from_float 转换的结果,还是 Decimal('0.1') 字符串构造的结果。操作只做本地只读核对,不修改客户原件,不把真实账目代入演示。
观察:第一步,由维护者在构造样本里记录输入类型及 float.hex() 的十六进制表示。repr(0.1) 通常仍显示简短的 0.1,不能凭这一行认定二进制存储已精确等于十进制原文。第二步,分别计算 Decimal.from_float(0.1) 和 Decimal('0.1'),结果条件是前者呈现很长的十进制展开,后者保持一位小数文本形式。第三步,检查代码是否把 float 变量和十进制字符串混用,结果条件是可区分“已有浮点值转换”和“从文本构造”两条路径。若结果仍不同,先检查是否同一 Python 版本、同一表达式和同一输入类型。
风险:如果把 Decimal.from_float(0.1) 的结果当成十进制 0.1,后续金额、数量或配置比较可能出现看似微小但可观察的尾差;如果通过提高 precision 试图从该浮点值恢复原始十进制文本,可能把“已有二进制值的精确展开”误认为“用户输入被还原”。排查时不要把测试代码写入客户业务文件,更不能因看到尾数就批量改写账目;若最初的文本没有保存,只能记录转换来源仍待核实。
下一步:准备本题去敏材料,包括 Python 3.14 版本信息、操作系统版本、最小复现代码(如 x=0.1、Decimal.from_float(x)、Decimal('0.1') 及输出)、是否使用字符串构造的说明;不要放入客户文件名、账号、业务数据或生产日志原文。可通过电脑快修网的信息展示与第三方维修对接渠道拨打 400-877-9605 作咨询,说明是台式电脑上 Python 浮点转 Decimal 的核对需求;该号码只作咨询,实际范围和安排需确认。