柳向城 发表于 2018-12-31 17:31

#

本帖最后由 柳向城 于 2021-1-28 11:32 编辑

#

thq 发表于 2018-12-31 17:52

乘十取整除十

EraserKing 发表于 2018-12-31 18:52


firstDot = self.sender().text().find('.')
if(firstDot!= -1):
    self.lcdString = self.sender().text()[:firstDot+1] + self.sender().text().replace('.', '')
else:
    self.lcdString = self.sender().text()

Hieda 发表于 2018-12-31 19:26

本帖最后由 Hieda 于 2018-12-31 19:29 编辑

你这段代码的目的可以理解为预读下一个字符,如果是“.”则确认之前是否出现过一次“.”,如果已经有就无视这个字符,否则append到字符串末端
所以我建议你你增加一个布尔值field(或者变量)来存储是否已经出现过“.”,这样一个是效率更快(每次读取字符是O(1)而不是O(n)),一个是核心逻辑只会出现一次:

if self.sender().text() == r"." and self._has_occurred:                                    #小数点输入超过一个忽略处理
    pass
else:
    self.lcdString = self.lcdString + self.sender().text()# 获得按键字符,按键字符并累计添加
    if self.render().text == r".":
         self._has_occurred = True

柳向城 发表于 2018-12-31 19:50

Hieda 发表于 2018-12-31 19:26
你这段代码的目的可以理解为预读下一个字符,如果是“.”则确认之前是否出现过一次“.”,如果已经有就无视这 ...

这个办法好

柳向城 发表于 2018-12-31 22:41

本帖最后由 柳向城 于 2021-1-28 11:38 编辑

#

gdsdjcb 发表于 2018-12-31 22:42

输入完再截断不行吗

EraserKing 发表于 2018-12-31 22:44

柳向城 发表于 2018-12-31 22:41
是取小数点及前面一串字符不变,小数字后面字符再有小数字就用空代替吗?

这个方法我想过,但是没有找 ...

我一开始没细看,是输入时处理?
我这个是输入后处理……把第一个点后面的点全清掉

柳向城 发表于 2018-12-31 22:45

EraserKing 发表于 2018-12-31 22:44
我一开始没细看,是输入时处理?
我这个是输入后处理……把第一个点后面的点全清掉 ...

是输入后处理

柳向城 发表于 2018-12-31 23:00

本帖最后由 柳向城 于 2021-1-28 11:37 编辑

#

EraserKing 发表于 2018-12-31 23:07

柳向城 发表于 2018-12-31 22:45
是输入后处理

那你试试吧,我没试过,脑补的代码

柳向城 发表于 2018-12-31 23:29

本帖最后由 柳向城 于 2021-1-28 11:37 编辑

#

你的全家 发表于 2019-1-1 05:55

(\d+\.\d+)

—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play

RAMDA 发表于 2019-1-1 18:07

你的全家 发表于 2019-1-1 05:55
(\d+\.\d+)

—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play

我觉得(\d+(\.\d+)?)应该会更好一点

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1.2

柳向城 发表于 2019-1-1 18:51

RAMDA 发表于 2019-1-1 18:07
我觉得(\d+(\.\d+)?)应该会更好一点

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2. ...
用这个正则表达式查找后,通过结果判断是否pass?还是替换?

RAMDA 发表于 2019-1-1 21:11

柳向城 发表于 2019-1-1 18:51
用这个正则表达式查找后,通过结果判断是否pass?还是替换?

去拿最外层括号捕获到的分组应该就可以了

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1.2

你的全家 发表于 2019-1-3 14:27

RAMDA 发表于 2019-1-1 21:11
去拿最外层括号捕获到的分组应该就可以了

—— 来自 Xiaomi MI 6, Android 8.0.0上的 S1Next-鹅版 v2.1. ...

match group 1

—— 来自 vivo NEX S, Android 8.1.0上的 S1Next-鹅版 v2.1.0-play

villy_yang 发表于 2019-1-3 14:38

数字输入也是用的按钮吧,那'.'这个按钮加个标志就行了,按过一次就不再生效。
页: [1]
查看完整版本: #