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 正确保留多位小数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈Python里面小数点精度的控制

    要求较小的精度 round()内置方法 这个是使用最多的,刚看了round()的使用解释,也不是很容易懂.round()不是简单的四舍五入的处理方式. For the built-in types supporting round(), values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done t

  • python通过floor函数舍弃小数位的方法

    本文实例讲述了python通过floor函数舍弃小数位的方法.分享给大家供大家参考.具体分析如下: python中可以通过math库的floor函数来舍弃浮点数后面的小数位 import math print(math.floor( x )) 例如:x=1.2,返回1.0 其返回值为浮点数,如果希望返回整数,可以写成: import math #from jb51.net print(int(math.floor( x ))) 输出结果:1 希望本文所述对大家的Python程序设计有所帮助.

  • python中实现控制小数点位数的方法

    前段时间遇到一个问题,python中怎么设置小数点位数,经过查资料,在这里整理了两种较为简单的方法: 法1:利用python内置的round()函数 a = 1.1314 a = 1.0000 a = 1.1267 b = round(a, 2) b = round(a, 2) b = round(a, 2) output: b=1.13 output: b=1.0 output: b=1.13 法2: a = 1.1314 a = 1.0000 a = 1.1267 b = '%.2f' %

  • python 保存float类型的小数的位数方法

    python保留两位小数: In [1]: a = 5.026 In [2]: b = 5.000 In [3]: round(a,2) Out[3]: 5.03 In [4]: round(b,2) Out[4]: 5.0 In [5]: '%.2f' % a Out[5]: '5.03' In [6]: '%.2f' % b Out[6]: '5.00' In [7]: float('%.2f' % a) Out[7]: 5.03 In [8]: float('%.2f' % b) Out[

  • pandas 小数位数 精度的处理方法

    控制台打印时显示的2位小数: pd.set_option('precision', 2) 实际修改数据精度: 官例:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.round.html >>> df = pd.DataFrame(np.random.random([3, 3]), ... columns=['A', 'B', 'C'], index=['first', 'second', 'th

  • python 除法保留两位小数点的方法

    如下所示: a = 1 b = 3 print(a/b) #方法一: print(round(a/b,2)) #方法二: print(format(float(a)/float(b),'.2f')) #方法三: print ('%.2f' %(a/b)) 以上这篇python 除法保留两位小数点的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 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, '

  • js实现千分符和保留几位小数的简单实例

    js实现千分符转化 function fmoney(s, n) { n = n > 0 && n <= 20 ? n : 2; s = parseFloat((s + '').replace(/[^\d\.-]/g, '')).toFixed(n) + ''; var l = s.split('.') [0].split('').reverse(), r = s.split('.') [1]; var t = ''; for (var i = 0; i < l.lengt

  • python格式化输出保留2位小数的实现方法

    我是小白就不用多说了,学习python做了个练习题,结果运行了一遍,发现输入金额后得到的有很多位小数, 虽然不知道为什么,但是看得很不舒服, 就想到应该把让小数点后只保留2位数 找到了方法:将{0}改为{:.2f} # 一家商场在降价促销.如果购买金额50-100元(包含50元和100元)之间, # 会给10%的折扣,如果购买金额大于100元会给20%折扣.编写一程序, # 询问购买价格,再显示出折扣(%10或20%)和最终价格 sum_money = float(input('请输入购买总金额

  • python中round函数保留两位小数的方法

    在我们日常计算的过程中,如果计算出小数,对大量的被保留数据,采用四舍五入这种保留法的误差总和是最小的,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一.四舍五入是一种精确度的保留法,是我们使用这种方法为基本保留法的原因.那在我们的python中如何四舍五入?如何保留小数?用round函数就可以. 1.round函数 python的内置函数,用于数字的四舍五入. 2.round 负数 四舍五入是围绕着0来计算的 示例 round(0.5) # 1.0 round(-0.5) #-1.0

  • 利用正则表达式校验金额最多保留两位小数实例代码

    目录 正则表达式校验金额最多保留两位小数,那么必须满足如下条件: 部分正则表达式符号说明: 第一步,小数点之前表达式 第二步,小数点及小数位置 总结 先给出表达式结果:^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$ 有同学留言0识别错误,可用这个:(([1-9]{1}\d*)(.\d{1,2})?)|(0{1}.\d{1,2})思路:1.小数点前非0,则小数位置可有可无: 2.小数点前为0,那么小数位置必有修改于 2022-08-03 不熟悉正则表达式的同学,咋一看,一

  • JS验证输入的是否是数字及保留几位小数问题

    1.验证方法 validationNumber(e, num)  e代表标签对象,num代表保留小数位数 function validationNumber(e, num) { var regu = /^[0-9]+\.?[0-9]*$/; if (e.value != "") { if (!regu.test(e.value)) { alert("请输入正确的数字"); e.value = e.value.substring(0, e.value.length -

  • Flex中对表格中某列的值进行数字格式化保留两位小数

    1.问题背景 一般的,表格中展示的比率,对比率的处理是:保留两位小数,并向上保留 2.实现实例 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="libr

  • js实现四舍五入完全保留两位小数的方法

    本文实例讲述了js实现四舍五入完全保留两位小数的方法.分享给大家供大家参考,具体如下: //四舍五入保留2位小数(若第二位小数为0,则保留一位小数) function keepTwoDecimal(num) { var result = parseFloat(num); if (isNaN(result)) { alert('传递参数错误,请检查!'); return false; } result = Math.round(num * 100) / 100; return result; }

  • javascript实现保留两位小数的多种方法

    第一种方法:javascript实现保留两位小数一位自动补零代码实例: 第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先看代码实例: function returnFloat(value){ var value=Math.round(parseFloat(value)*100)/100; var xsd=value.toString().split("."); if(xsd.length==1){ val

  • JS实现保留n位小数的四舍五入问题示例

    本文实例讲述了JS实现保留n位小数的四舍五入问题.分享给大家供大家参考,具体如下: //数字四舍五入(保留n位小数) getFloat = function (number, n) { n = n ? parseInt(n) : 0; if (n <= 0) return Math.round(number); number = Math.round(number * Math.pow(10, n)) / Math.pow(10, n); return number; }; /* //用法示例:

随机推荐