decimal模块 --数字的精度、保留小数位数、取整问题

开始之前需要注意一点是:精度值为数字的总位数,如:1.23, 精度值为3; 0.123,精度值也为3

1、更改默认精度值后,直接进行计算即可保留对应范围值

from decimal import getcontext,Decimal

getcontext().prec = 3   #设置精度值为3

f = 12.23435521    #type(f) : float
value = Decimal(str(f))  #value: Decimal(‘12.23435521‘)
#或:value = Decimal.from_float(f)
print value*1  #Decimal(‘12.2‘)

value = Decimal(1)/Decimal(3)
print value  #Decimal(‘0.333‘)

2、小数保留位数问题

from decimal import getcontext,Decimal

f = 12.23435521    #type(f) : float
value = Decimal(repr(f)).quantize(Decimal(‘0.000‘))   #保留3位小数,这里需要注意:在数字的精度值允许的范围内
print value  #12.234

3、取整问题

 需要记住几个参数:

  ROUND_CEILING  总是趋向无穷大向上取整

  ROUND_DOWN 总是趋向0取整

  ROUND_FLOOR  总是趋向负无穷大向下取整

  ROUND_HALF_DOWN 如果最后一个有效数字大于或等于5则朝0反方向取整;否则,趋向0取整

  ROUND_HALF_EVEN 类似于ROUND_HALF_DOWN,不过,如果最后一个有效数字值为5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整

  ROUND_HALF_UP  类似于ROUND_HALF_DOWN,不过如果最后一位有效数字为5,值会朝0的反方向取整

  ROUND_UP 朝0的反方向取整

  ROUND_05UP 如果最后一位是0或5,则朝0的反方向取整;否则向0取整

 写一个例子:

import decimal
from decimal import getcontext,Decimal

getcontext().prec = 1
getcontext().rounding = getattr(decimal, ‘ROUND_CEILING‘)

value = Decimal(1)/Decimal(8)
print value   # Decimal(‘0.2‘)

  

时间: 2024-08-08 03:15:54

decimal模块 --数字的精度、保留小数位数、取整问题的相关文章

js数据保留小数位数

1000.12345.toFixed(2)=1000.12: 1000.12987.toFixed(2)=1000.13: 1000.1.toFixed(2)=1000.10 js数据保留小数位数,布布扣,bubuko.com

关于.net 保存 decimal类型数据到SQLServer2012数据库时自动取整的问题

公司同事问我有没有遇到过decimal类型数据入库时,会自动取整的问题(比如12.3入库后值是12,12.8入库后值是13,入库后自动四舍五入自动取整): 之前就遇到过从数据去decimal类型数据时,会自动取整的问题:我想应该是同样的问题吧,叫同事设置SQLParameter参数时,设置Scale=2,Precision=18:类似代码如下: var param1 = new SqlParameter("@Money",System.Data.SqlDbType.Decimal);

C# 保留小数位数的方法

?  前言 本文主要介绍 C# 中实现小数位数的保留,完成对小数位数四舍五入的几种方法. 1.   使用 Math.Round() 方法 说明: 1)   其实使用 Math.Round() 方法,是根据国际标准(五舍六入)的方式进行取舍的. 2)   进1的情况有两种:1)保留小数位后面第1位大于等于6:2)保留小数位后面第1位等于5,则第2位必须大于0. double double1_1 = Math.Round(1.545, 0);            //2.0 double doub

ADF_12c_保留小数位数问题

Jdeveloper (Version 12.1.2)默认显示三位小数,有小数精度要求时,给出如下解答. 进入该VO,找到有小数位数需求的列: 属性 UI Hint       format type:Number       format:###0.000000 如上是保留六位小数的情况,其他可类推.

三种方法保留小数位数

js代码部分为 var PI=3.1415192;var str=PI+""; //因为数字没法进行字符操作,所以需要先转换:var index=str.indexOf(".");//返回当前的字符的点的位置console.log(index); //1console.log(str.substr(0,index+3)); //3.14 //合并后的第一种写法console.log(str.substr(0,str.indexOf(".")+3)

JS中保留小数位数

一.1.2.toFixed(2) 浮点数进行四舍五入设置指定小数位的数值 二.2.toFixed(2) 整数尝试,但是在JS中会被认为是对象名,以至于无法使用 三."1.2".toFixed(2) 由于toFixed方法是针对Number类型的,所以string类型的即使能够转换成数字,也不能使用这个方法 四.var a=1;a.toFixed(2); 构造整数对象,那么就可以调用了 http://www.w3school.com.cn/jsref/jsref_tofixed.asp

JS判断数字、中文、小数位数

1.JS判断数字 ①var value=$("#test").val(); if(!isNaN(value)){ alert("是数字"); }else{ alert("不是数字"); } ②function checkRate(input) { var re = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/ var nubmer = document.getElement

toFixed方法保留小数位数

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <script> //  toFixed方法 //  1.作用:对数据进行小数位数的保留 //  2.格式:数据.toFixed(小数位数) // 3.返回值:返回值是字符串类型 var a = 3.1425926; var b = a.toFixed(3); cons

CEILING保留n位小数向上取整

number=3.1415926 CEILING(number*POWER(10,n))/POWER(10,n) 思路为:乘以10的n次方得到要保留的小数部分并转换为整数,再用CEILING向上取整,将剩下的小数部分舍掉,然后再除以10的n次方还原原来的小数位 原文地址:https://www.cnblogs.com/Cyril-hcj/p/11698297.html