首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么"getcontext().prec = 2“没有真正设置它,所以Decimal()的用法是两位小数呢?

"getcontext().prec = 2" 这段代码并没有真正设置 Decimal() 函数的小数位数限制,而是设置了当前上下文环境的小数位数限制为 2。上下文环境是 decimal 模块中的一个重要概念,它决定了 Decimal 对象的计算精度和舍入方式。

当你调用 Decimal() 函数创建一个 Decimal 对象时,它会继承当前上下文环境的精度设置。也就是说,如果当前上下文环境的小数位数精度限制为 2,那么通过 Decimal() 创建的 Decimal 对象默认也会保留两位小数。

这个设置主要用于精度控制,可以确保浮点数计算的精确性。然而,它并不会自动将结果四舍五入到指定的小数位数,只是在计算过程中限制了有效位数。如果你想要特定精度的结果,需要使用 Decimal 对象的 quantize() 方法来进行舍入。

在云计算领域,可以使用 Decimal 对象来处理精确的金额计算、财务数据等要求精度的场景。腾讯云提供了 Serverless 云函数(SCF)服务,适用于无服务器架构,能够方便地在云端运行自定义代码逻辑。你可以使用 SCF 结合 Decimal 对象来实现精确计算需求。

腾讯云 Serverless 云函数(SCF)产品介绍链接地址: https://cloud.tencent.com/product/scf

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python decimal模块使用方法详解

) # 结果为Decimal(‘50.57’),结果四舍五入保留了两位小数 5.Decimal 结果转化为string from decimal import * str(Decimal(‘3.40...  ROUND_05UP 如果最后一位0或5,则朝0反方向取整;否则向0取整 """ # 1.常规计算 getcontext().prec = 9 r1 = Decimal(1).../ Decimal(3) print("r1 ", r1) # r1 0.333333333 # 2.但是getcontext().prec会包含小数点前面的所有长度,当前面长度有变化时并不能固定控制小数点后位数...r2 = Decimal(10) / Decimal(3) print("r2 ", r2) # r2 3.33333333 # 3.想要固定控制小数点后面的位数则需要使用decimal.quantize...(Decimal('0.00000000')),注意不能超过getcontext().prec位数 r3 = Decimal(1) / Decimal(3) print("r3 ", r3.quantize

3.4K30

python里decimal类型转换

'Decimal:', decimal.Decimal(t)           基于元组表示创建时不太方便,不过提供了一种可移植方式,可以导出小数值而不会损失精度。...与 NaN 比较大小来确定排序顺序没有明确定义,这会导致一个错误。上下文         到目前为止,前面的例子使用都是 decimal 模块默认行为。...2. 精度         上下文 prec 属性控制着作为算术运算结果所创建新值精度。字面量值会按这个属性保持精度。 ...Context 支持 with 使用的上下文管理器 API,所以这个设置只在块内应用。         ...线程         “全局”上下文实际上线程本地上下文,所以完全可以使用不同值分别配置各个线程。

1.8K30

小 bug 引发大灾难,0.1 + 0.2 结果竟然……

具体做法:用2乘十进制小数,可以得到积,将积整数部分取出,再用2乘余下小数 部分,又得到一个积,再将积整数部分取出,如此进行,直到积中小数部分为零,或者达到所要求精度为止。...所以当两个存在误差数相加,其结果也必定会出现误差,这就解释了在计算机中为什么 0.1 + 0.2 不等于 0.3。...即两个数差值足够小。 确保数组索引都是整数。 按分(而不是元)计算金额。百分比放大100倍计算以避免出现小数。 Python3 使用除法 / 时需注意,结果总是小数,整除符号 //。...具有以下特点: 提供十进制数据类型,并且存储为十进制数序列; 有界精度:用于存储数字位数固定,可以通过 decimal.getcontext().prec=x来设定,不同数字可以有不同精度...可以通过整数、字符串或者元组构建 decimal.Decimal,对于浮点数需要先将其转换为字符串 >>>from decimal import * # 设置精度为 7 位 >>>getcontext(

89190

为什么你需要少看中文技术博客以及如何在Python里面精确四舍五入

网上有人说,因为在计算机里面,小数不精确,例如 1.115在计算机中实际上 1.1149999999999999911182,所以当你对这个小数精确到小数点后两位时候,实际上小数点后第三位 4...但是如果我们在Python中把 0.125精确到小数点后两位,那么就会变成 0.12: >>> round(0.125, 2)0.12 为什么在这里 四舍了?...还有更奇怪,另一个在计算机里面能够精确表示小数 0.375,我们来看看精确到小数点后两位是多少: >>> round(0.375, 2)0.38 为什么这里又 五入了?...如果不能,那么它可能并没有达到四舍五入标准,例如 1.115,小数点后第三位实际上 4,当然会被舍去。...如果你这个小数在计算机中能被精确表示,那么, round采用进位机制 奇进偶舍,所以这取决于你要保留那一位,它是奇数还是偶数,以及下一位后面还有没有数据。

68820

如何在 Python 里面精确四舍五入?

网上有人说,因为在计算机里面,小数不精确,例如 1.115在计算机中实际上 1.1149999999999999911182,所以当你对这个小数精确到小数点后两位时候,实际上小数点后第三位 4...但是如果我们在Python中把 0.125精确到小数点后两位,那么就会变成 0.12: >>> round(0.125, 2)0.12 为什么在这里 四舍了?...还有更奇怪,另一个在计算机里面能够精确表示小数 0.375,我们来看看精确到小数点后两位是多少: >>> round(0.375, 2)0.38 为什么这里又 五入了?...如果不能,那么它可能并没有达到四舍五入标准,例如 1.115,小数点后第三位实际上 4,当然会被舍去。...如果你这个小数在计算机中能被精确表示,那么, round采用进位机制 奇进偶舍,所以这取决于你要保留那一位,它是奇数还是偶数,以及下一位后面还有没有数据。

5K50

Python里精确地四舍五入,以及你为什么需要少看垃圾博客

网上有人说,因为在计算机里面,小数不精确,例如1.115在计算机中实际上1.1149999999999999911182,所以当你对这个小数精确到小数点后两位时候,实际上小数点后第三位4,所以四舍五入...但是如果我们在Python中把0.125精确到小数点后两位,那么就会变成0.12: >>> round(0.125, 2) 0.12 为什么在这里四舍了?...还有更奇怪,另一个在计算机里面能够精确表示小数0.375,我们来看看精确到小数点后两位是多少: >>> round(0.375, 2) 0.38 为什么这里又五入了?...如果不能,那么它可能并没有达到四舍五入标准,例如1.115,小数点后第三位实际上4,当然会被舍去。...如果你这个小数在计算机中能被精确表示,那么,round采用进位机制奇进偶舍,所以这取决于你要保留那一位,它是奇数还是偶数,以及下一位后面还有没有数据。

5.5K63

Python 四舍五入

舍入到指定小数位数: 对于需要舍入位数右侧第一位数字(即“决定位”),如果小于5,则舍去和它右侧所有数字。...如果“决定位”大于或等于5,则舍去和它右侧所有数字,并将“决定位”前一位数字加1。 例如: 3.141592653589 四舍五入到两位小数 3.14。...向下舍入: 不论“决定位”是什么数字,总是将数值舍入到比它小最接近整数或小数位数。 例如: 2.9 向下舍入到整数 2。...用法稍微复杂一点,但是靠谱时候多一些: 1234567891011121314151617181920212223 import decimalfrom decimal import Decimaldecimal.getcontext...decimal.ROUND_HALF_EVEN:四舍五入,5向最近偶数舍入。 但是我在一次实验中还是发现了不正确四舍五入,暂时没有复现,使用时候还是要多加小心。

6210

入门篇:Python里

整数 整数,令人惊叹于简单。两个整数相除,例如4/3,得到一个浮点数,并且(4/3)*3结果也是浮点数4.0。即便你没有定义浮点数,在进行除法运算时候,它会自动出现。...小数 小数在财务中用途最广,最无聊居然以法律方式规定了小数形式。然而,Python中所有的小数点运算,都有上下文精确度问题,对此,可以用专门模块解决。...>>> getcontext().prec = 6 >>> Decimal(1) / Decimal(7) Decimal('0.142857') >>> getcontext().prec = 28...>>> Decimal(1) / Decimal(7) Decimal('0.1428571428571428571428571429') 在实际项目中,代码中设置精度位置和进行计算位置可能间隔几百行...最安全方法使用localcontext: >>> getcontext().prec = 6 >>> # 6853 lines elided ... with localcontext() as ctx

75231

【测试开发】python系列教程:decimal

提供了一个完整货币处理API,可以处理各种货币常见业务,如货币兑换、汇率计算、支付处理等。...Decimal类型 print(Decimal.from_float(22.22)) #结果: 3、通过设定有效数字,限定结果样式 from decimal import * #表示设置小数只取6位小数位...getcontext().prec=6 print(Decimal(1)/Decimal(7)) #结果:0.142857 getcontext().prec=3 print(Decimal(55...)*1000) #结果:5.50E+4 【注】:当设置prec长度比数字长度小的话,结果会有误 4、四舍五入,保留几位小数 print(Decimal('5.1251').quantize(Decimal...(x2.quantize(Decimal('1.0000'),ROUND_FLOOR)) #-3.1235,floor地板趋近于更小,所以始终进位了(因为负数如果正数就不会进位) print

30110

Python3 四舍五入问题详解

本来一个简单问题,为什么变得难以理解,难道Pythonround策略出了问题? 作为一个专业级语言平台,Python显然不会没有想到这样问题。 其实,浮点数问题并非我们想象那样简单。 二....进位近似值大于原值,截断近似值小于原值,所以小数位较小数值(如1.215被进位,1.275被截断),进位近似值会出现尾部增加值(上面说尾部乱码),截断近似值小于原值,会出现”999......# 使用字符串得到精确值 >>> getcontext().prec = 52 # 设置精度为52位(这里指十进制) >>> Decimal(‘1’) / Decimal(str(2**52))...) + Decimal('0.2') Decimal('0.3') # 精度范围内,准确运算 >>> getcontext().prec = 3 >>> getcontext().rounding...Context管理,设置取舍精度和策略 >>> tc = getcontext() # 获取运算环境 >>> tc.prec 28 # 缺省精度 >>> tc.rounding

3.2K30

Python入门系列第二章--第一节:变量、字符串与数字

# 定义浮点型变量c = 2.01d = 3.1# 打印 c+d结果将得出5.1099999999999print(c + d) 大家一定会疑问,2.01+3.1 应该是5.11吗,为什么控制台输出...5.109999999?...其实这是浮点数一个普遍问题,浮点数并不能准确地表示十进制, from decimal import Decimal,getcontext z = Decimal(str(c))+Decimal(str...(d)) print(z) 在某些情况下需要精确到小数点后N位(精确度)则可以利用getcontext()设置精确度 getcontext().prec = 2z = Decimal(str(c)) /...所支持类型 整型:没有大小限制 浮点型:由小数和整数已经小数点组成 复数:由实数部分和虚数部分构成 数据类型不允许改变,这就意味着如果改变数字数据类型 值,将重新分配内存空间 3.创建三种类型数字变量

38440

Python随记(2)数据类型(小数,分数) 分支循环

>>(3,2,2.57) #四舍五入 math.sqrt(144) >>12.0 144 ** .5 >>>12.0 pow(155,5) 小数类型  精度固定浮点数。...使用小数对象我们可以得到一个只保留两位小数为精度浮点数。这对表达固定精度特性(货币累加)以及对精度实现都是一个理想工具。 ...,默认改变层最小 设置全局小数精度:decimal模块中其他一些工具可以用来设置所有小数数值精度,安排错误处理等。 ...>>>decimal getcontext().prec =4  # 设置精度 >>>decimal Decimal(1)/ decimal Decimal(7) Decimal(0.1429) 分数基础知识...  Fraction(分数)与小数一样,他用来处理浮点数类型数值不准确性。

75220

第二章--第一节:变量、字符串与数字

5.11吗,为什么控制台输出5.109999999?...但是在某些环境中(比如财务统计),需要精确浮点型,我们可使用pythondecimal模块进行计算其中Decimal参数必须字符串,利用str函数将数字转换成字符串 from decimal import...Decimal,getcontext z = Decimal(str(c))+Decimal(str(d)) print(z) 在某些情况下需要精确到小数点后N位(精确度)则可以利用getcontext...()设置精确度 getcontext().prec = 2 z = Decimal(str(c)) / Decimal(str(d)) print(z) 3.变量赋值特殊方法 在第2个小结我们所看到都是...所支持类型 整型:没有大小限制 浮点型:由小数和整数已经小数点组成 复数:由实数部分和虚数部分构成 数据类型不允许改变,这就意味着如果改变数字数据类型 值,将重新分配内存空间 3.创建三种类型数字变量

35930

Python数值类型

真除法、Floor除法和小数位截断 /:实现真除法。在python中,总是返回浮点数值。 //:实现floor地板除法,它会去掉除法运算后小数位,以便得到小于运算结果最大整数。...小数类型(Decimal) 小数模块decimal,它有一个函数Decimal(),它是精确可以指定小数位数。 如果没有python基础,这里能看懂多少算多少,反正小数也不多。...有两种范围精度:全局范围、局部范围。 例如,没有设置精度时,会保留很多位数小数。...') 设置全局范围精度为4,即保留4位小数: >>> import decimal >>> decimal.getcontext().prec = 4 >>> decimal.Decimal(1) /...还可以设置局部范围精度,局部表示退出了这个范围就失效了。使用with/as语句可以设置局部精度,所以退出with/as语句块精度设置就失效了。

2.1K30

Python数据类型之数字

当我们创建第一个对象v1时候会在内存中开辟一块空间作为存放v1对象值,当我们创建第二个对象v2时候也会在内存中开辟一块空间来作为v2对象值,那如果这样说,那是不是说对象v1和v2内存地址两块...123 >>> id(v1), id(v2) (4549969744, 4549969744) 通过上面的结果我们可以看到var1和var2内存地址相同,就代表他们使用同一块空间,所以当两个或者多个对象值都是同一个时候...为什么要叫做float浮点型: 浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数小数点位置可变,比如: 1.23 * 109和 12.3 * 108相等。...>>> from decimal import * >>> getcontext() Context(prec=50, rounding=ROUND_HALF_EVEN, Emin=-999999,...().prec = 50 >>> a = Decimal(1)/Decimal(3)#注,在分数计算中结果正确,如果直接定义超长精度小数会不准确 >>> a Decimal('0.33333333333333333333333333333333333333333333333333

1.3K20

15年前,一则公路旁Google招聘广告

而在对Google公司介绍中,一张插图引起了我注意,这张插图Google在101号高速公路旁打的大幅招聘广告。 ?...好了言归正传,今天不聊高数题求解,来聊聊谷歌这道算法题。题意非常明确,找到自然底数e第一个出现十位连续数字构成质数。而找到该质数,加上 .com 就可以进到谷歌招聘网站。 那么如何做?...这里需要用到阶乘计算,通过简单递归,设置递归出口便可以实现。...Decimal 完美利用了 “通过借助整数来表示小数方式”解决了浮点数不精确问题,提供十进制数据类型,并且存储为十进制数序列。下面这个函数根据泰勒展开式得到了较为精确e值。...def get_e(n): decimal.getcontext().prec=10000 e=decimal.Decimal('1.0') for i in range(1,n

87120
领券