iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0

Posted &清风&

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0相关的知识,希望对你有一定的参考价值。

首先请求到的数据都会变成字符串,先将字符串转化为double类型

double fdouble = [str doubleValue];

然后再设置小数点后的位数

[NSString stringWithFormat:@"%.1f", fdouble];

 重点:  提供一个NSSing的扩展,传入需要保留的小数位,返回字符串。并且去掉末尾的0.

#import <Foundation/Foundation.h>

@interface NSString (EliminateZero)

//   integer  必传
- (NSString *)eliminateZeroWithDouble:(NSInteger)integer;

@end



#import "NSString+EliminateZero.h"

@implementation NSString (EliminateZero)

- (NSString *)eliminateZeroWithDouble:(NSInteger)integer{
    
    NSString *str = [self copy];
    
    double fdouble = [str doubleValue];
    
    NSString *ftotal;
    switch (integer) {
        case 1:
            ftotal = [NSString stringWithFormat:@"%.1f", fdouble];
            break;
        case 2:
            ftotal = [NSString stringWithFormat:@"%.2f", fdouble];
            break;
        case 3:
            ftotal = [NSString stringWithFormat:@"%.3f", fdouble];
            break;
        case 4:
            ftotal = [NSString stringWithFormat:@"%.4f", fdouble];
            break;
        case 5:
            ftotal = [NSString stringWithFormat:@"%.5f", fdouble];
            break;
        default:
            break;
    }

    while ([ftotal hasSuffix:@"0"]) {
        ftotal = [ftotal substringToIndex:[ftotal length]-1];
    }
    
    if ([ftotal hasSuffix:@"."]) {
        ftotal = [ftotal substringToIndex:[ftotal length]-1];
    }
    
    return ftotal;
    
}


@end

 

 

 

 

以上是关于iOS 当请求到的数据是double类型,会失去精准度,并且去掉小数点后的0的主要内容,如果未能解决你的问题,请参考以下文章

double和int类型的转换

各种劫持整理——持续更新

BigDecimal

BigDecimal

精度更高的double类型计算工具类(借助BigDecimal类型)

在 C# 中从十进制转换时会失去精度吗?