注册 登录
主题 : DOUBLE 转换成 nsstring时,精度异常
级别: 新手上路
UID: 28356
精华: 0
发帖: 33
可可豆: 124 CB
威望: 114 点
在线时间: 4(时)
注册时间: 2010-08-22
最后登录: 2015-12-13
0 楼:  发表于: 2014-03-31 09:27    发自: Web Page
来源于 一般提问 分类

DOUBLE 转换成 nsstring时,精度异常   

double d2 = 8.3;
        NSNumber *num1  = [NSNumber numberWithDouble:d2];
        NSString *strD2 = [num1 stringValue];
        NSLog(@"d2: %@", strD2); // 我是想转换成字符串,不是为了输出显示。
// 我要将数字 8.3 转换成字符串。
// 可是,得到字符串却是 8.300000000000001
// 为什么这样,该如何解决?



谢谢

级别: 风云使者

状态: 连续签到 - [309天]
UID: 83747
精华: 0
发帖: 3864
可可豆: 19533 CB
威望: 19404 点
在线时间: 2395(时)
注册时间: 2011-07-27
最后登录: 2017-10-19
1 楼:  发表于: 2014-03-31 09:37    发自: Web Page
stringWithFormat
级别: 新手上路
UID: 28356
精华: 0
发帖: 33
可可豆: 124 CB
威望: 114 点
在线时间: 4(时)
注册时间: 2010-08-22
最后登录: 2015-12-13
2 楼:  发表于: 2014-03-31 10:08    发自: Web Page
引用
引用第1楼chenxin于2014-03-31 09:37发表的  :
stringWithFormat

谢谢版主。
问题差不多解决,但是,结果是
8.300000
数值是 8.3,转成字符串后,有这么多0,怎么解决?

如果是转换成字符串后剔除吗?我觉得这样不是很好的办法,有没有更好的办法?
级别: 侠客
状态: 连续签到 - [7天]
UID: 234543
精华: 0
发帖: 80
可可豆: 214 CB
威望: 175 点
在线时间: 129(时)
注册时间: 2013-07-27
最后登录: 2016-08-22
3 楼:  发表于: 2014-03-31 11:12    发自: Web Page
    double d = 8.3;
    NSString *result = [NSString stringWithFormat:@"%.1f",d];
    NSLog(@"%@",result);
[ 此帖被恨鐵不成金在2014-03-31 11:17重新编辑 ]

级别: 新手上路
UID: 28356
精华: 0
发帖: 33
可可豆: 124 CB
威望: 114 点
在线时间: 4(时)
注册时间: 2010-08-22
最后登录: 2015-12-13
4 楼:  发表于: 2014-03-31 23:17    发自: Web Page
引用
引用第3楼恨鐵不成金于2014-03-31 11:12发表的  :
    double d = 8.3;
    NSString *result = [NSString stringWithFormat:@"%.1f",d];
    NSLog(@"%@",result);

这个。。。。。
大哥,小数点,不是说保留一位,我的意思是,不要保留无意义的0.

%.1f
8.321,转成字符串,结果是8.3 这显然不是我想要的结果。


我的需求,转成字符串后,不要有多余无意义的0
比如,8.3就就是8.3
8.321 ,就是8.321

当然,小数点,我是不知道多少位的,多少都可能。
级别: 新手上路
UID: 28356
精华: 0
发帖: 33
可可豆: 124 CB
威望: 114 点
在线时间: 4(时)
注册时间: 2010-08-22
最后登录: 2015-12-13
5 楼:  发表于: 2014-04-01 21:04    发自: Web Page
大伙,这个需要真的还要用到正则这么麻烦吗?
级别: 新手上路
UID: 28356
精华: 0
发帖: 33
可可豆: 124 CB
威望: 114 点
在线时间: 4(时)
注册时间: 2010-08-22
最后登录: 2015-12-13
6 楼:  发表于: 2014-04-01 21:27    发自: Web Page
复制代码
  1. NSMutableString *str2 = [NSMutableString stringWithString: @"89.200200"];
  2.         NSError *error = NULL;
  3. NSRegularExpression *regex =[NSRegularExpression regularExpressionWithPattern:@"0+[    wind_phpcode_0    ]quot; options:NSRegularExpressionCaseInsensitive error:&error];
  4.         [regex replaceMatchesInString:str2 options:0 range:NSMakeRange(0, str2.length) withTemplate:@""];



最后这样做了,感觉杀鸡用牛刀。



级别: 新手上路
UID: 174604
精华: 0
发帖: 1
可可豆: 1 CB
威望: 1 点
在线时间: 33(时)
注册时间: 2012-11-02
最后登录: 2014-09-25
7 楼:  发表于: 2014-05-30 14:06    发自: Web Page
回 6楼(likecode) 的帖子
感谢楼主,正好有用
级别: 新手上路
UID: 317034
精华: 0
发帖: 71
可可豆: 107 CB
威望: 98 点
在线时间: 591(时)
注册时间: 2014-05-21
最后登录: 2017-08-13
8 楼:  发表于: 2016-04-05 12:44    发自: Web Page
虽然帖子过去了很久,但是却没有一个最优方案。为了不至于让后来的人寻找答案至此感觉到异常孤独,我就把方案贴这里了😂。



double d2             = 8.3;
NSString *d2Str       = [NSString stringWithFormat:@"%lf", d2];
NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:d2Str];
NSString *strD2       = [num1 stringValue];
NSLog(@"d2: %@", strD2);


级别: 新手上路
UID: 391111
精华: 0
发帖: 2
可可豆: 2 CB
威望: 2 点
在线时间: 2(时)
注册时间: 2014-10-25
最后登录: 2016-06-01
9 楼:  发表于: 2016-06-01 11:09    发自: Web Page
回 6楼(likecode) 的帖子
有没有发现 8.2 会转化成8.199999999999999
这个方法还有用吗

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部