前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Objective-C Float 转化成NSString 小数不精确解决

Objective-C Float 转化成NSString 小数不精确解决

作者头像
赵哥窟
发布于 2018-09-13 03:49:50
发布于 2018-09-13 03:49:50
73500
代码可运行
举报
文章被收录于专栏:日常技术分享日常技术分享
运行总次数:0
代码可运行

在开发中经常会遇到Float类型转化成NSString类型后不准确的问题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
float a = 0.96;
NSString *str = [NSString stringWithFormat:@"%.1f",a];
NSLog(@"%@",str);

打印

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2018-05-25 16:24:14.457366+0800 Test[19641:4237944] 1.0

我们想要的是输出0.9

这种问题怎么处理 可以写一个NSString的Category来处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#import "NSString+Precision.h"

@implementation NSString (Precision)

/**
 Float 类型转化成字符串获取小数点后N位
 
 @param value 需要转化的Value
 @param position 小数点后几位
 @return 转化后的字符串
 */
+ (NSString *)decimalNumberWithFloat:(float)value position:(int)position
{
    NSString *doubleString        = [NSString stringWithFormat:@"%lf", value];
    NSDecimalNumber *decNumber    = [NSDecimalNumber decimalNumberWithString:doubleString];
    NSString *decStr = [decNumber stringValue];
    
    // 获取"."所在字符串中的Range
    NSRange range = [decStr rangeOfString:@"."];
    // 处理整型没有小数点的情况(小数点后加两个0,方便转化成金额)
    if (range.length == 0) {
        decStr = [NSString stringWithFormat:@"%@.00",decStr];
    }
    
    range = [decStr rangeOfString:@"."];
    // 最大截取范围
    NSInteger maxCutRange = decStr.length - range.location - 1;
    // 是否超出了最大截取范围
    if (position <= maxCutRange) {
        decStr = [decStr substringWithRange:NSMakeRange(0, range.length + position + range.location)];
    }
    else{
        // 超出范围按最大来
        decStr = [decStr substringWithRange:NSMakeRange(0, range.length + maxCutRange + range.location)];
    }
    
    return decStr;
}

@end
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSLog(@"-----------%@",[self decimalNumberWithFloat:0.96 position:1]);

输出
2018-05-25 16:27:53.547775+0800 DD[19782:4242695] -----------0.9
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OC字符串常用函数
创建一个字符串对象: NSstring * str1 = @"hello"; NSString * str = [[NSString alloc]initWithString:@"hello world!"]; NSString * str_1 = [[NSString alloc]initWithUTF8String:"hello world"];//把C的字符串转化为OC的字符串 int a = 123; NSString * str_3 = [[NSString alloc]initWithForma
猿人谷
2018/01/17
9000
OC知识--Foundation框架详尽总结之『字符串类』
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-String.html 本文对Foundation框架中的字符串类(NSString、NSMutableString)的使用做一个详细的总结。 1. NSString 1. NSString介绍 Foundation框架支持一个名为NSString的类,用于处理字符串对象,由unichar字符组成。 一个NSString对象就代表一个字符
程序员充电站
2018/05/31
6760
Objective-C精选字符串处理方法
        无论是什么编程语言对字符串的操作是少不了的,对复杂的字符串的分析和操作我们可以用正则表达式来达到我们的目的。简单的字符串处理我们可以借助OC中NSString封装好的字符串处理方法,不过前提是你得了解每个方法如何使用,以下做了一个简单的总结,便于以后使用。以下事例是原创代码,转载请注明出处。         1.字符串的创建         字符串的创建有多种方法,下面的例子中给了常用的几种字符串创建方法(还有好多) 1 2 3 4 5 6 //字符串创建工厂
lizelu
2018/01/11
8950
Objective-C 学习记录4
1.创建字典的NSString可变字符串,和NSMutableString不可变字符串.都是objective的对象.
叉叉敌
2019/06/26
4640
iOS中的NSString与NSMutableString
xy_ss
2023/11/22
2360
iOS中的NSString与NSMutableString
Objcetive-c基础知识
Foundation Kit基础知识 1.范围作用 NSRange typedef struct _NSRange { unsigned int location; unsigned int length; } NSRange; 使用:location是开始位置,length是元素个数;通常在字符串范围或者数组使用 创建NSRange 1.1)直接赋值给字段(range.location = 12,range.length=13) 1.2)使用聚合机制(range={4,5}) 1.3)
苦咖啡
2018/05/08
7330
iOS开发——十六进制字符串与NSData的转化
最近在完成一个需求时,遇到了NSData类型转换为十六进制的字符串这个需求的函数,在stackoverflow中翻找的时候,给出的答案基本上是如下的:
Originalee
2018/08/30
2.4K0
iOS开发——大大节省代码量的小技巧
总结一些开发中的常用方法,大量节省开发时间 觉得好用的,烦请帮点喜欢 1. 判断手机号码格式是否正确,利用正则表达式验证 + (BOOL)isMobileNumber:(NSString *)mobileNum { if (mobileNum.length != 11) { return NO; } /** * 手机号码: * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[6, 7
Originalee
2018/08/30
4770
Objective-C之NSArray学习笔记(IOS 9.1)
---- NSArray类简介 有序且只可以存储Objective-C对象的数组 初始化后,内容不可变,长度也不可变,不能进行增、删、改操作 不能存放nil (nil是标志数组的结束) 在MRC模式下,会发送retain消息于每个加入数组中的元素都进行保持,数组被释放的时候会发送release消息 ---- 属性表(@property) @property 描述 @property(readonly) NSUInteger count 数组元素的个数 @property(nonatomic,
半纸渊
2018/09/04
6870
iOS开发·NSString字符串的各种基本操作,数值转换及衍生操作
但有时候,仅仅停留在这些基本操作还不能直接满足一些需求,这时候可以利用这些基本操作进行一些字符串的衍生操作。
陈满iOS
2018/09/10
2.3K0
Objective-C: 字符串NSString与NSMutableString
      字符串算是OC中非常重要和常用的一部分内容,OC中的字符串与我之前在学习C,C++,Java中的字符串有一定的不同,它非常类似于C++中容器的概念,但用法却与之还是有很大的不同,也许是因为OC的语法就与其他我们常用的编程语言不尽相同。        这里总结一下字符串NSString与NSMutableString。 一. NSString       NSString代表字符序列不可变的字符串,NSString的功能非常强大,OC的字符串处理比C语言的饿字符串简单、易用得多。       这里
猿人谷
2018/01/17
7560
编码篇-开发中关于数字的那些事儿
在日常的开发中我们随时都会跟数字打着交道,对数字的处理也是很平常的事,本文仅对常用的数字操作一个小结,当一个笔记方便日后查看,也希望读者能从中收获些感觉有用的知识。
進无尽
2018/09/12
1.2K0
编码篇-开发中关于数字的那些事儿
OC基础--字符串
做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱。所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础、UI控件、多线程、动画、网络、数据持久化、自动布局、第三方框架等几个模块进行梳理。本系列的所有博文集合参见:iOS开发知识梳理博文集。本文主要介绍 OC基础--字符串。
mukekeheart
2020/09/07
1K0
利用Runtime实现简单的字典转模型
前言 我们都知道,开发中会有这么一个过程,就是将服务器返回的数据转换成我们自己定义的模型对象。当然服务器返回的数据结构有xml类型的,也有json类型的。本文只讨论json格式的。 大家在项目中一般是怎么样将服务器返回的json转化成自己定义的模型类呢? 我在项目中一般都是使用的MJExtension。 本文讲解的也基本就是解读MJExtension中的部分源码。 好了,废话不多说,直接上代码,let's go 简单字典转模型 首先,从最简单的字典开始,例如我们需要将如下的字典转化成自定义的模型。
Scott_Mr
2018/05/16
2K0
《Effective Objective-C 》干货三部曲(三):技巧篇
继上一篇《Effective Objective-C 》超级干货三部曲(二):规范篇之后,本篇即是三部曲的第三篇:技巧篇。本篇作为三部曲的最终篇,归纳讲解的是本书中关于Objective-C开发的技巧性知识。
用户2932962
2018/08/30
7960
《Effective Objective-C 》干货三部曲(三):技巧篇
iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【上篇】
背景:如果商家平台侧服务出现问题,商家需要一个备选方案进行正常的收退款;因此在POS机新增一个开关进行切换支付通道,智能机app直接与银联对接。并在本地维护产生的订单数据和维护订单状态。
公众号iOS逆向
2022/08/22
1K0
iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【上篇】
IOS开发系列—Objective-C之Foundation框架
概述 我们前面的章节中就一直新建Cocoa Class,那么Cocoa到底是什么,它和我们前面以及后面要讲的内容到底有什么关系呢?Objective-C开发中经常用到NSObject,那么这个对象到底是谁?它为什么又出现在Objective-C中间呢?今天我们将揭开这层面纱,重点分析在IOS开发中一个重要的框架Foundation,今天的主要内容有: 1. Foundation概述 2. 常用结构体 3. 日期 4. 字符串 5. 数组 6. 字典 7. 装箱和拆箱 8. 反射 9. 拷贝 10. 文件操作
用户1941540
2018/06/20
8110
【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词
-- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 String 开头的方法;
韩曙亮
2023/03/27
1.4K0
JavaScript 浮点数陷阱及解法
众所周知,JavaScript 浮点数运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果,如 0.1+0.2=0.30000000000000004、1-0.9=0.09999999999999998,很多人知道这是浮点数误差问题,但具体就说不清楚了。本文帮你理清这背后的原理以及解决方案,还会向你解释JS中的大数危机和四则运算中会遇到的坑。
laixiangran
2018/10/22
1.9K0
JavaScript 浮点数陷阱及解法
iOS-Foundation框架中常用的类
Foundation框架中最常用的类。 Foundation框架中最我们经常用的类大致有NSString、NSArray、NSDictionary等等,虽然不需要将每一个类中提供了什么方法都记下来,但是需要做到心中有数,知道Foundation框架提供了什么样的方法,能够达到什么效果,用到的时候直接去API中查找即可,避免因为不知道有这些方法,而走弯路。 NSString NSString创建与内存存储 NSString是1个数据类型,用来保存OC字符串,NSString的本质是1个类,既然是1个类,所以,
xx_Cc
2018/05/10
1.8K0
推荐阅读
相关推荐
OC字符串常用函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验