主要是新建乙個文字格式類,繼承textinputformatter,在內部進行精確控制
實現整數字及小數字的長度控制,小數字為零即限定整數長度,限制以點開頭及00,01,02這種非法輸入
import
'package:flutter/services.dart'
;///數字輸入的精確控制
class
textnumberlimitformatter
extends
textinputformatter
//只允許輸入數字和小數點if(
!exp.
hasmatch
(newvalue.text)
)///包含小數點的情況
if(newvalue.text.
contains
(pointer)
) string input = newvalue.text;
int index = input.
indexof
(pointer)
;///小數點前位數
int lengthbeforepointer = input.
substring(0
, index)
.length;
///整數部分大於約定長度
if(lengthbeforepointer > _intlen)
///小數點後位數
int lengthafterpointer = input.
substring
(index, input.length)
.length -1;
print
('小數後位數'
+lengthafterpointer.
tostring()
);///小數字大於精度
if(lengthafterpointer > _declen)
}elseif(
//以點開頭
newvalue.text.
startswith
(pointer)
||//如果第1位為0,並且長度大於1,排除00,01-09所有非法輸入
(newvalue.text.
startswith
(zero)
&& newvalue.text.length>1)
||//如果整數長度超過約定長度
newvalue.text.length>_intlen
)return newvalue;}}
//使用:
child:
textfield
( keyboardtype: textinputtype.number,
maxlines:1,
textalign: textalign.right,
focusnode: pricefocus,
inputformatters:
[textnumberlimitformatter(5
,3),
],//整數5位,小數3樓
inputformatters:
[textnumberlimitformatter(5
,0)]
,//只整數5位
1、整數5位,小數3位
2、只取整數5樓
3、限制00,01,02,03,04等非法輸入
Oracle中left join中右表的限制條件
sql中最簡單形式的left join,是直接根據關聯字段,以左表為基準,對右表進行匹配。在select語句中選取的字段,如果有右表的記錄 一般都是需要右表的某些記錄的 取出配對成功的右表記錄中對應的這個欄位的值 否則,直接置null。這本身就是left join的特點 保證左表記錄完整,右表只是輔...
為什麼計算機中的小數字無法精確
想搞清這個問題,首先要明白十進位制和二進位制的轉換關係 以數字43.21轉換為二進位制進行說明 43 2 21.1 21 2 10.1 10 2 5.0 5 2 2.1 2 2 1.0 1 2 0.1 整數部分 101011 總結 不斷除以基數 2進製的基數是2 倒序取餘數,110101 0.212...
為什麼計算機中的小數字無法精確
想搞清這個問題,首先要明白十進位制和二進位制的轉換關係 以數字43.21轉換為二進位制進行說明 43 2 21.1 21 2 10.1 10 2 5.0 5 2 2.1 2 2 1.0 1 2 0.1 整數部分 101011 總結 不斷除以基數 2進製的基數是2 倒序取餘數,110101 0.212...