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

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

作者头像
赵哥窟
发布2018-09-13 11:49:50
6970
发布2018-09-13 11:49:50
举报
文章被收录于专栏:日常技术分享

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

代码语言:javascript
复制
float a = 0.96;
NSString *str = [NSString stringWithFormat:@"%.1f",a];
NSLog(@"%@",str);

打印

代码语言:javascript
复制
2018-05-25 16:24:14.457366+0800 Test[19641:4237944] 1.0

我们想要的是输出0.9

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

代码语言:javascript
复制
#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
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档