|
& k2 u5 M% p( h5 c9 ?: Z, d在onKeyPress事件中作一些处理 & Q; }6 v( W! A* X, d$ N
使得输入只能是数字和一个小数点 4 D E/ w8 w; @, B
% L. s# O0 g. e: F% i( O* x
然后设置相应的标志。 # L1 R! h6 A1 N, n, ]7 _7 E
2 O5 C8 P' n: N( s
当然,还有另外的办法,就是用pos函数来查找是否有小数点 6 k: v8 @6 n6 B( ^5 p$ E9 Q% z; I
如果没有,那么就是整数,反之是小暑,但是这个方法有一个缺陷
. j- G' [0 A% b- D' a- H# }4 X% R就是如果输入的不只是数字,还有字母的话,那么判断显然是错误的。
+ S4 A6 B9 k1 {, a3 Z此外,如果是以指数方式表示的,那么前两种的判断方法都会复杂起来。
9 `9 x% p* T0 ^$ j( c
i) F" ^7 q4 w& x' n于是,还有第三个办法,用好Exception , o& r% Y5 a6 g$ o7 l% ^
首先,用Edit1->Text.ToInt,如果不产生异常,表明是整数,反之用
( j1 ^, m' I" q+ m9 ?Edit1->Text.ToDouble,如果不产生异常,那么是小数,反之
/ N( \, n! ^7 E9 f, ?( O就表明不是合法的数字
9 |7 X, F, P% K2 c0 X这个办法最方便。大概的程序代码如下 9 K) T* J7 P( K; \* v& l* n! R |
) n' j5 g! H5 a" S1 M8 D0 C9 b$ \& _
try , m* A$ X `$ ~) ?
{
3 a3 f& _' y3 W1 K4 _% y Edit1->Text.ToDouble();
) t% K8 F4 ]% R2 l: a try " o% Y$ Y' { g8 S
{
. l) v( a: t% A9 b/ j Edit1->Text.ToInt();
" h3 R6 E$ p c1 n5 g" d ShowMessage("is a int"); , V/ C$ l: f2 w K% C" T- [
}
) S* w5 j1 C! i, e) x catch(const EConvertError &e)
4 j# R: x. ~8 R1 l+ H8 U { ) V/ q. \2 L! M n4 g( C- N; u
ShowMessage("is a double"); r2 t# E/ F; c- [4 e
}
# l) y8 C& ~5 ?! H5 l4 m+ ] U }
* X5 w9 A1 }, m- A- m8 \4 D+ h/ T, c9 X catch(const EConvertError &e)
; L$ E, N" p$ y' }2 ?5 K# f {
0 M2 `, X! [8 A( F1 L ShowMessage("not a int ot double");
4 h0 @* n, }8 a5 B3 P" C } 1 I0 v$ K6 _3 z& N7 A$ a- ?0 Y1 n
/ P1 K7 P7 ^$ f' O0 d( r d
上面的代码已通过调试 |