python3浮点数保留两位小数,python保留小数点前两位代码
在我们上一门课(python Windows编程-3:数字处理(1))中,我们实现了一个正常工作的窗口程序,初步支持整数输入的功能,但负数的处理方式居然是是错误的(找到了吗?)。
在这节课中,我们改进了负数的处理,增加了浮点数输入的函数。
在原代码中,切换数字符号的逻辑是正确的。但是如果一个数字切换成负数,继续输入数字就很奇怪了,如下。
输入结果好像是-61,其实是-59。这个错误的原因是什么?请大家自己试着分析一下。调试活动中的关键步骤实际上是猜测错误的原因。
问题出在我们的延续逻辑上:
Value=value* 10 int(event)这里不考虑正值或负值。如果value为负,这里的结果与我们的预期完全不同。
我们对代码进行修改来解决这个问题:确保这个逻辑只处理正数。
v=ABS(value)v=v * 10int(event)value=math . copy sign(v,value) ABS就是把value的绝对值取为v,从而保证v为正。
数字处理使用正数V,这样就不会有误差。
然后使用数学中的copysign函数将值的符号给v,确保最后一个值与原始符号相同。
这样会彻底解决这个问题吗?请修改代码并自行测试。
浮点数的处理叫做浮点数,这是计算机领域的一个专用名称。日常生活中一般称为小数。我们可以这样理解浮点名字的含义。在一串数字中,小数点的位置是不确定的,是浮动的。相对来说,概念是定点数。比如整数是定点数,小数点总是在最后一个数字后面。3354计算器典型地显示了这种现象。
当我们输入小数点按钮时,LCD屏幕上的输出不会有任何变化(因为小数点总是可见的),但显然程序内部发生了变化。之后输入的数字都跟着小数点走。
我们统称这种内部变化为状态的变化。
在整数状态下,输入数字的处理逻辑如前面的代码所示(乘以10并相加)。在浮点状态下,新输入的数字不会影响原数字的含义。输入的新数字越来越少。小数点后的第一位是第十位,然后是第一百位,第一千位,依此类推。
为了实现这个功能,我们必须记住当前输入的数字在哪里。这与上面整数逻辑的实现明显不同。在处理整数的时候,新的输入总是一个位,这是一个无记忆的操作。
让我们看看包括浮点数处理在内的完整代码逻辑。
如果decnum==0,则V=ABS(值):V=V * 10Int(事件)否则:V=V Int(事件)/(10 * * decnum)decnum=1 value=math。这里首先解释copysign (v,value)代码中使用的运算符。
连续两次,代表力量。
10**decNum表示10的decNum次方。
等号(=)可以理解为省略号。
DecNum=1decNum=decNum 1 1上面两句话在这里是等价的。
我们用一个状态decNum来记录输入状态的变化,同时也用它来表示当前输入的数字的位权(10的-decNum次方)。当decNum==0时,为整数输入模式,逻辑与之前相同。否则进入十进制输入模式,每按一次键就会导致decNum增加,为下一位数字的输入准备正确的权重。
一方面要慎重考虑,另一方面发现可以合并的要采纳。这种做法将使变量的含义更接近内在逻辑的本质。当然,如果在添加代码功能后,我们发现这种功能组合不再有效,我们应该果断地将其分离。
小数点的逻辑当你点击小数点按钮时会发生什么?
Elif event== . :如果decnum==0: decnum=1如果当前输入模式为整数模式,则变为小数模式,当前小数位为第一位(第十位)。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。