python 数字的四舍五入的问题

由于 python3 包括python2.7 以后的round策略使用的是decimal.ROUND_HALF_EVEN 
即Round to nearest with ties going to nearest even integer. 也就是只有在整数部分是奇数的时候, 小数部分才逢5进1; 偶数时逢5舍去。 这有利于更好地保证数据的精确性, 并在实验数据处理中广为使用。

>>> round(2.55, 1) # 2是偶数,逢5舍去
2.5
>>> format(2.55, ‘.1f‘)
‘2.5‘

>>> round(1.55, 1) # 1是奇数,逢5进1
1.6
>>> format(1.55, ‘.1f‘)
‘1.6‘

但如果一定要decimal.ROUND_05UP 即Round away from zero if last digit after rounding towards zero would have been 0 or 5; otherwise round towards zero. 也就是逢5必进1需要设置floatdecimal.Decimal, 然后修改decimal的上下文

import decimal
from decimal import Decimal
context=decimal.getcontext() # 获取decimal现在的上下文
context.rounding = decimal.ROUND_05UP

round(Decimal(2.55), 1) # 2.6
format(Decimal(2.55), ‘.1f‘) #‘2.6‘

ps, 这显然是round策略问题, 不要扯浮点数在机器中的存储方式, 且不说在python里float, int 都是同decimal.Decimal一样是对象, 就算是数字, 难道设计round的人就这么无知以至于能拿浮点数直接当整数一样比较?!

原文地址:https://www.cnblogs.com/wangchaowei/p/9368888.html

时间: 2024-10-16 21:49:39

python 数字的四舍五入的问题的相关文章

python 数字

python数字: 本文主要讲解常用的数字类型转换, 数字函数和随机数字函数. 1 # coding:utf-8 2 3 # python数字类型转换 4 def data_conversion(): 5 """ 6 int(x [,base ]) 将x转换为一个整数 7 long(x [,base ]) 将x转换为一个长整数 8 float(x ) 将x转换到一个浮点数 9 complex(real [,imag ]) 创建一个复数 10 str(x ) 将对象 x 转换为

Python 数字day07

Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时数字对象将被创建: var1 = 1 var2 = 10 您也可以使用del语句删除一些数字对象引用. del语句的语法是: del var1[,var2[,var3[....,varN]]]] 您可以通过使用del语句删除单个或多个对象,例如: del var del var_a, var_b Python 支持四种不同的数值类型: 整型(Int) -

Python - 数字 - 第六天

Python 数字(Number) Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建: var1 = 1 var2 = 10 您也可以使用del语句删除一些数字对象的引用. del语句的语法是: del var1[,var2[,var3[....,varN]]] 您可以通过使用del语句删除单个或多个对象的引用,例如: del var del var_a, var_b Py

js数字格式化-四舍五入精简版

搜索网上的,数字格式化过余复杂,自己想了个简单方法,欢迎吐槽. 简化说明: '123333' => 12.3万 parseInt('123333') 字符串转整型 parseInt('123333')/1000 先除以1000,预留小数位数 Math.round(parseInt('123333')/1000),四舍五入到整数 (Math.round(parseInt('123333')/1000)/10) 除以10保留1位小数 (Math.round(parseInt('123333')/10

python数字、字符串

1.标示符由字母.下划线和数字组成,且数字不能开头 12mytest            错 mytest                对 MyText  (大驼峰式命名法) myText (小驼峰式命名法) my_test  个人喜欢这种命名方法 不可以使用关键字命名: 在这个推荐一个强大的python工具 ipython,安装python环境后  pip install ipython 以下是我用此软件查的关键字 In [1]: import keyword In [2]: keywor

Python 数字类型

.title { background-color: black; color: aliceblue; height: 28px; width: 100%; line-height: 28px; text-align: center; font-family: 仿宋; font-size: 15px; opacity: 0.5 } --> { } Python 数字类型 一.数字 定义:a = 1 特性:1.只能存放一个值 2.一经定义不可更改 3.直接访问 分类:1.整型[int] 整数可用十

Python数字(Number)

Python 数字数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间. 以下实例在变量赋值时 Number 对象将被创建:var1 = 1var2 = 10您也可以使用del语句删除一些数字对象的引用.del语句的语法是:del var1[,var2[,var3[....,varN]]]]您可以通过使用del语句删除单个或多个对象的引用,例如:del vardel var_a, var_b Python 支持三种不同的数值类型: 整型(Int)

python数字规则和内建函数

python字符串补充: 字符串对象须当作参数的方法(非str.capitalize()形式): 1.str(obj)——将对象转化为字符串 2.len(str)——计算字符串长度 3.max(str)——返回字符串中最大的字母 4.min(str)——返回字符串中最小的字母 python数值类型转换 1.int(x) 将x转化为整数 2.float(x)将x转换为一个浮点数 python算术运算 +-*/直接写 %求余 **幂运算,例如2**3=8,意为2的3次方 数学函数 1.abs(x)—

Python数字类型

数字数据类型存储数值.它们是不可变的数据类型,这意味着改变数据类型的结果值,需要一个新分配的对象. 分配一个值给它们来创建的对象.例如: var1 = 1 var2 = 10 也可以使用del语句删除相关的一些对象.del语句的语法是: 可以使用del语句删除单个或多个对象.例如: del var del var_a, var_b Python支持四种不同的数值类型: int (有符号整数): 通常被称为只是整数或整数,是正或负整数,不带小数点. long (长整数 ): 或长,是无限大的整数,