/*

* 处理一个数字加小数点的字符串,前面无0,保留两位。网上有循环截取的方法,如果数字过长,浪费内存,这个方法在优化内存的基础上设计的。

*/

-(NSString*)getTheCorrectNum:(NSString*)tempString

{

//先判断第一位是不是 . ,是 . 补0

if ([tempString hasPrefix:@"."]) {

tempString = [NSString stringWithFormat:@"0%@",tempString];

}

//计算截取的长度

NSUInteger endLength = tempString.length;

//判断字符串是否包含 .

if ([tempString containsString:@"."]) {

//取得 . 的位置

NSRange pointRange = [tempString rangeOfString:@"."];

NSLog(@"%lu",pointRange.location);

//判断 . 后面有几位

NSUInteger f = tempString.length - 1 - pointRange.location;

//如果大于2位就截取字符串保留两位,如果小于两位,直接截取

if (f > 2) {

endLength = pointRange.location + 2;

}

}

//先将tempString转换成char型数组

NSUInteger start = 0;

const char *tempChar = [tempString UTF8String];

//遍历,去除取得第一位不是0的位置

for (int i = 0; i < tempString.length; i++) {

if (tempChar[i] == '0') {

start++;

}else {

break;

}

}

//如果第一个字母为 . start后退一位

if (tempChar[start] == '.') {

start--;

}

//根据最终的开始位置,计算长度,并截取

NSRange range = {start,endLength-start};

lablebalance.text = [tempString substringWithRange:range];

return tempString;

}



//判断只能显示出两位小数点

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

{

//控制长度

if(range.location>=20)

return NO;

const char * ch=[string cStringUsingEncoding:NSUTF8StringEncoding];

if(*ch == 0)

return YES;

//字符0-9 和 .

if( *ch != 46 && ( *ch<48 || *ch>57) )

return NO;

//有了小数点

if([ lablebalance.text rangeOfString:@"."].length==1)

{

NSUInteger length=[lablebalance.text rangeOfString:@"."].location;

//小数点后面两位小数 且不能再是小数点

if([[lablebalance.text substringFromIndex:length] length]>2|| *ch ==46) //3表示后面小数位的个数。。

return NO;

}

return YES;

}