python中的float保留多位数_python 正确保留多位小数的实例

python自带的float函数在保留两位小数的时候不够准确容易出现误差,而(‘%.2f’ % a)的方式是将数字转成了字符串类型,无法进行数字运算,所以这里我们将封装一个方法来实现正确的保留多位小数。

from functools import reduce

def str2float(strf):

def char2num(s):

return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]def char2int(x, y):

return 10 * x + y

tstr = strf.split('.')

hightre = reduce(char2int, map(char2num, tstr[0]))

if len(tstr)>1:

lowre = reduce(char2int, map(char2num, tstr[1]))*(0.1**len(tstr[1]))

else:

lowre = 0

return hightre + lowre

从上述代码我们引用了reduce函数(python2.7不需要导入)配合map内置函数来实现;

char2num函数主要是将字符串类似转为对应的数字类型;

char2int函数实现左侧的数字乘以10后加上右侧数字,比如char2int(1,2)-> 12;

tstr是将高位数和低位数通过”.”隔开;

hightre是处理高位数,即非小数位部分,tstr[0]将左侧的数字通过char2num函数转成数字类型,作为单个单个的数字,如(”123.456”)将小数点左侧的部分转为(1,2,3),通过char2int函数转为(((110+2)10)+3) -> 123;

lowre是处理低位数,即小数位部分,tstr[1]将右侧的数字通过char2num函数转成数字类型,作为单个单个的数字,如(”123.456”)将小数点右侧的部分转为(4,5,6),通过char2int函数转为(((410+5)10)+6) -> 456,由于是小数位所以要乘以0.1的N次方(N=小数位的位数),(456(0.10.1*0.1)) -> 0.456;

最后返回高位数拼接低位数,即123.456的浮点类型;

PS:经过试验发现,使用该方法最多可支持12位数字,即高位数和低位数总位数在12位以内可以正常显示;

以上这篇python 正确保留多位小数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

您可能感兴趣的文章:浅谈Python里面小数点精度的控制pandas 小数位数 精度的处理方法python 保存float类型的小数的位数方法python 除法保留两位小数点的方法python通过floor函数舍弃小数位的方法python中实现控制小数点位数的方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Pandas的groupby()和agg()函数来实现列数据分类汇总后保留两位小数的操作。具体示例如下: ```python import pandas as pd # 构造示例数据 data = pd.DataFrame({'category': ['A', 'A', 'B', 'B', 'B'], 'value': [1.2345, 2.3456, 3.4567, 4.5678, 5.6789]}) # 对 category 列进行分组,并对 value 列求平均值并保留两位小数 result = data.groupby('category')['value'].agg('mean').round(2) print(result) ``` 输出结果为: ``` category A 1.79 B 4.90 Name: value, dtype: float64 ``` 在上述示例,我们首先使用groupby()函数对data数据集的category列进行分组。接着,对每个分组的value列求平均值,并使用round()函数保留两位小数。最后,通过agg()函数将处理后的结果返回。 ### 回答2: 在Pandas,要对列数据进行分类汇总并保留两位小数,可以使用以下方法: 首先,使用`groupby()`函数对列进行分类汇总,指定要进行分类汇总的列名。例如,假设要对名为"category"的列进行分类汇总。 接下来,可以通过`agg()`函数对分类后的数据进行聚合操作。在`agg()`函数,可以指定要应用于每个分类的聚合操作。在这个例子,我们想要保留两位小数,因此可以将`round()`函数作为聚合操作的一部分。 最后,可以使用`.apply()`函数,将聚合操作应用于每个分类,并将结果存储在一个新的DataFrame。 下面是一个具体的示例代码: ```python import pandas as pd # 创建示例数据 data = {'category': ['A', 'A', 'B', 'B', 'C'], 'value': [1.2345, 2.3456, 3.4567, 4.5678, 5.6789]} df = pd.DataFrame(data) # 对列进行分类汇总并保留两位小数 round_df = df.groupby('category').agg({'value': lambda x: round(x, 2)}) print(round_df) ``` 以上代码,对"category"列进行了分类汇总,并将"value"列的数据保留两位小数。最终输出的结果是一个新的DataFrame,其包含了分类汇总后保留两位小数的数据。 ### 回答3: 在 Pandas ,将列数据分类汇总并保留两位小数可以使用 `groupby` 和 `round` 方法。 首先,使用 `groupby` 方法将数据按照想要分类的列进行分组。然后,对每个分组的数据进行汇总,例如求和、平均值等。 接下来,使用 `round` 方法将汇总后的数据保留两位小数。`round` 方法接受一个参数,表示要保留小数位数。 下面是一个示例代码: ```python import pandas as pd # 创建一个包含分类和数值的 DataFrame data = { '分类列': ['A', 'A', 'B', 'B', 'C', 'C'], '数值列': [1.234, 2.567, 3.789, 4.951, 6.789, 9.123] } df = pd.DataFrame(data) # 使用 groupby 方法按分类列进行分组,并计算每组的总和 grouped = df.groupby('分类列').sum() # 使用 round 方法保留两位小数 grouped = grouped.round(2) print(grouped) ``` 运行以上代码,将得到如下输出: ``` 数值列 分类列 A 3.80 B 8.74 C 15.91 ``` 上述代码按照 '分类列' 进行分组,并求出每组的数值列的总和。然后使用 `round` 方法保留两位小数,得到了每组分类的汇总数据。注意,汇总数据将以分类列作为索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值