Python中如何将0.999820这种小数转换成int类型

我要处理一些数据 0.999820,都是这种保留了 6 位小数的 str 类型字段 ,怎么转换成 int 啊,一转换就报错 我最终要拿他作减法运算,转成 float 直接变成 1.0 了,不是我想要的结果,我要保证他还是原来的精度 6 位小数,只不过要转换成 int 类型

ValueError: invalid literal for int() with base 10: '0.999820'


Python中如何将0.999820这种小数转换成int类型
36 回复

decimal 了解一下
以及『我要保证他还是原来的精度 6 位小数,只不过要转换成 int 类型』小数和 int 类型同时出现,一定要这么秀嘛…


在Python里,直接用int(0.999820)会得到0,因为int()是直接截断小数部分。如果你想要四舍五入,得用round()先处理一下,再用int()

# 直接转换会截断,得到0
num = 0.999820
result_truncate = int(num)
print(f"直接int转换(截断): {result_truncate}")  # 输出: 0

# 先四舍五入再转换,得到1
result_round = int(round(num))
print(f"先round再int转换: {result_round}")  # 输出: 1

# 如果你明确知道要向上取整(比如0.0001也要变成1),可以用math.ceil
import math
result_ceil = math.ceil(num)
print(f"向上取整: {result_ceil}")  # 输出: 1

所以关键就看你到底想要哪种效果:是直接砍掉小数,还是四舍五入,或者无条件向上进一。大部分情况下,想要“正常”的整数转换,用int(round(your_float))就行。

一句话总结:根据你的取整需求,在int()前用round()math.ceil()处理。

如何用 int 来表示带小数的。。。
不如你换个问题
为啥用 int 来表示带小数的。。。
难道计算那边你不能把别的换成 float 算么。

0.999820 - X = (0.999820 - X ) * 1000000 / 1000000 = (999820 - X * 1000000) / 1000000 .

忽略你描述中存在的问题,我想你大概是想用 int 计算又要求结果保留 6 位小数,那么可以把字符串转成 float,然后把参与运算的数字先乘以 1000000,运算完再除回来

楼上正解。乘以 1000000 后进行运算,输出结果钱除以 1000000

#5 钱 > 前

楼主说的不明不白的

首先’0.999820’转 float 怎么可能直接变成 1.0 了
>>> float(‘0.999820’)
0.99982

另外你要解决的问题我估计 1~3 楼说的方法可以解决

int,全称是 integer,我觉得楼主缺少一本英汉字典。

我有说全称不是 integer ?

楼主去学习一下什么是 int …

你都知道全称是 integer 了你不知道这是“整数”的意思吗。整数类型的小数。牛逼。

他是想说,你可能没搞懂 int 代表什么,否则不会提出这样的转换要求。。

严格按照 LZ 的 narrative 来做这个问题「保留了 6 位小数的 str 类型字段」

应该是先在字符串里把小数点向右移动 6 位,再做 int,计算完毕之后再除以 1e6

会问这个问题的基本上是非常小白,你们竟然想扯清清楚楚的?

LZ 应该是说转为数值类型的吧~

又是 int 又是 6 位小数?逗我呢

#15 说得有道理。

典型的 xy 问题,别浪费时间了。

保持原来精度 6 位小数,还要是 int 型…天秀

我还以为只有客户会提出这样的要求

我以为我学了假的 int

float 类型,了解一下?

指出问题所在就可以了么 为啥 v2 一群人冷嘲热讽的 怎么这种风气?

这个问题刷新了我对这个论坛的看法,我暂且认为是楼主没有描述清楚或者我理解错误了吧。一开始我还以为要说的是二进制在表示小数时的精度问题,原来并不是。。。。

。。。哈哈哈 不看你的题目,只看你的问题。。对你需要操作的两个数 成个十万一百万什么的,最后结果再除回来。。。精度保留了

因为 LZ 完全没有作为程序员的一点点追求与尊严,我们都很痛心,希望多来几个人喷醒他

这个楼主想要的是 float 型的浮点数,而不是字符串型的浮点数。

前排的回答都很靠谱了~~

你到底知不知道什么是 int???

看到这么多人骂楼主我就放心了…

看到这么多人骂楼主我就放心了…

看到这么多人骂楼主我就放心了…

#21 客户也不会提出这种需求…

#24 因为 sp1234 不在这里

我估计是领导要求用 int 算,然后 po 主就懵了。就像楼上说的先乘以 1e6 然后 round 进行计算,结果再除回 1e6 就可以了

回到顶部