处理一个数字加小数点的字符串

简介:

/*

 * 处理一个数字加小数点的字符串,前面无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 .

    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;

}











本文转自 卓行天下  51CTO博客,原文链接:http://blog.51cto.com/9951038/1749912,如需转载请自行联系原作者
目录
相关文章
|
存储 缓存 负载均衡
【2022持续更新】大数据最全知识点整理-HBase篇
【2022持续更新】大数据最全知识点整理-HBase篇
1584 0
【2022持续更新】大数据最全知识点整理-HBase篇
|
监控 数据可视化 数据挖掘
BOT+EPC模式详解:优缺点剖析及适用领域
在现代项目管理和基础设施建设领域,BOT+EPC模式逐渐成为业内的“明星选手”。该模式结合了BOT(建设-运营-移交)和EPC(设计-采购-施工)的优势,实现了融资、建设、运营和移交的全生命周期管理,具有高效、分散风险、明确责任分工等优点。然而,它也存在合同复杂、前期成本高和沟通协调难度大的挑战。BOT+EPC模式适用于大型基础设施、能源、城市公共服务和工业项目。项目管理工具如板栗看板在其中发挥重要作用,提高透明度、进度控制和成本管理。
500 1
|
人工智能 监控 安全
智慧工地综合管理云平台SaaS源码:安全、高效、绿色、智能的建筑施工新生态
智慧工地平台通过整合物联网、人工智能、大数据等技术,实现了对工地人员、设备、环境、材料等方面的全面监测和管理。
577 4
|
开发框架 IDE JavaScript
MAD,现代安卓开发技术:Android 领域开发方式的重大变革~(1)
MAD,现代安卓开发技术:Android 领域开发方式的重大变革~(1)
MAD,现代安卓开发技术:Android 领域开发方式的重大变革~(1)
|
JSON 文字识别 API
哈哈,我用Python开发了一个搜题神奇
哈哈,我用Python开发了一个搜题神奇
523 0
|
C语言
C语言分支语句和循环语句经典题及易错题
C语言分支语句和循环语句经典题及易错题
316 0
|
Linux C语言
linux openssl 升级
下载地址 https://www.openssl.org/source/ fox.风 选择下载版本 一定要选择适合你当前软件的版本 例如当前 我的版本是 1.0.X版 这里选择 https://www.openssl.org/source/openssl-1.0.1u.tar.gz wget https://www.openssl.org/source/op
3806 0
|
Dart Unix Linux
Flutter:path 库详解
本文主要介绍一下 path 库的使用。
1081 0
|
网络协议 算法 安全
MQTT.fx接入物联网平台使用说明
通过MQTT.fx工具快速接入阿里云物联网平台
6262 0
MQTT.fx接入物联网平台使用说明
|
JSON JavaScript 前端开发

热门文章

最新文章