iOS

NSDecimal

简介:表示基数为10的结构体。

NSDecimal

表示基数为10的结构体

声明

typedef struct {
    signed   int _exponent:8;
    unsigned int _length:4;     // length == 0 && isNegative -> NaN
    unsigned int _isNegative:1;
    unsigned int _isCompact:1;
    unsigned int _reserved:18;
    unsigned short _mantissa[NSDecimalMaxSize];
} NSDecimal;

描述

构建32位应用程序时,NSInteger是一个32位整数。 64位应用程序将NSInteger视为64位整数。

话题

  • NSDecimalCopy
    这个方法,根据一个Decimal创建另一个Decimal,复制十进制数的值。

方法定义

void NSDecimalCopy(NSDecimal *destination, const NSDecimal *source);

将一个NSDecimal源中的值复制到目标NSDecimal中。

示例代码:

- (void)NSDecimalCopyExample {
    for (int i = 0 ; i<2; i++) {
        NSString *str =[NSString stringWithFormat:@"1.22%d",i];
        NSLog(@"小数值:%@\n",str);
        NSDecimal result;
        NSScanner *theScanner = [[NSScanner alloc] initWithString:str];

        [theScanner scanDecimal:&result];

        NSDecimal coord;
        NSDecimalCopy(&coord,&result);

        NSLocale *locale =[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"];
        NSLog(@"%@",NSDecimalString(&coord, locale));

    }
}

打印结果:

2019-05-09 16:19:44.216328+0800 foundation[80968:2087167] 小数值:1.220

2019-05-09 16:19:44.217162+0800 foundation[80968:2087167] 1,22
2019-05-09 16:19:44.217228+0800 foundation[80968:2087167] 小数值:1.221

2019-05-09 16:19:44.217278+0800 foundation[80968:2087167] 1,221
  • NSDecimalString
    在小数和字符串之间转换。
    这个方法,返回适合指定区域设置的十进制值的字符串表示形式。

方法定义

/// 返回适合指定区域设置的十进制值的字符串表示形式
/// @param dcm 要表示的十进制值。
/// @param locale NSLocale的实例或具有与NSLocaleDecimalSeparator键对应的字符串值的字典。
NSString * NSDecimalString(const NSDecimal *dcm, id locale);

  • NSDecimalCompact
    这个方法,压缩十进制结构以提高效率。

方法定义

void NSDecimalCompact(NSDecimal *number);

方法描述
格式化数字,以便使用它进行计算将占用尽可能少的内存。 所有NSDecimal …算术函数都需要紧凑的NSDecimal参数。

推荐阅读

目录