iOS官方开发文档翻译_3:NSInteger, NSUInteger, NSDecimal

Numbers包括NSInteger,NSUInteger,NSDecimal,NSDecimalNumber,NSNumber,NSNumberFormatter的官方文档,这里对NSInteger,NSUInteger,NSDecimal进行翻译,下一篇将翻译NSDecimalNumber。
为保证阅读体验,这篇开始不再付英文原文翻译,并且会附上进一步个人理解说明,后面会附上原文链接,可自行参考。
另外,对于Discussion这个词的翻译,我想了很久,也参考了很多资料,决定把它翻译为“细节参考”。

NSInteger

描述一个整型数据的数据类型。

声明

在iOS,macOS,tvOS上:

1
typedef long NSInteger;

在watchOS上:

1
typedef int NSInteger;

细节参考

当构建32位应用程序时,NSInteger是一个32位的整型数据,当构建的应用程序为64位时,NSInteger是一个64位的整型数据。

主题

常量

NSIntegerMax

表示NSInteger中数据的最大值。
(如同前面所说,位数不同最大值也不同,其中32位机器中为2^32-1,64位机器中为2^63-1)

声明
1
#define NSIntegerMax

NSIntegerMin

表示NSInteger中数据的最小值。
(32位机器中为-2^32,64位机器中为-2^63)

声明
1
#define NSIntegerMin

NSUInteger

描述一个无符号整型数据的数据类型。

声明

在iOS,macOS和tvOS上:

1
typedef unsigned long NSUInteger;

在watchOS上:

1
typedef unsigned int NSUInteger;

细节参考

当构建32位应用程序时,NSUInteger是一个32位的无符号整型数据,当构建的应用程序为64位时,NSUInteger是一个64位的无符号整型数据。

主题

常量

NSUIntegerMax

NSUInteger数据类型能表示的最大值。
(以64位设备为例,值为2^64-1)

声明
1
#define NSUIntegerMax

NSDecimal

一个代表十进制数据的结构体类型。

主题

从另一个十进制数据来创建一个十进制数据

NSDecimalCopy

从十进制数据中拷贝一份值。

声明
1
void NSDecimalCopy(NSDecimal *destination, const NSDecimal *source);
细节参考

从source(源数据)拷贝到destination(目标数据)中。
了解更多可以查看:Number and Value Programming Topics

十进制数据和字符串之间的转换

NSDecimalString

返回适合指定语言环境的十进制数值的字符串表示形式。

声明
1
NSString * NSDecimalString(const NSDecimal *dcm, id locale);
参数说明

dcm:十进制数据表示。
locale:一个NSLocale的实例或具有与NSLocaleDecimalSeparator键对应的字符串值的字典实例。

算术运算的使用参考

NSDecimalCompact

压缩十进制结构以提高效率。

声明
1
void NSDecimalCompact(NSDecimal *number);
细节参考

格式化数据以在计算中尽量使用更少的内存空间。

NSDecimalAdd

两个十进制数据相加。

声明
1
NSCalculationError NSDecimalAdd(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);
细节参考

将左操作数(leftOperand)和右操作数(rightOperand)相加,结果储存在result中。NSDecimal实例可以表示最大38位有效数字,如果超出该范围,就必须要进行舍入操作。roundingMode决定了怎么舍入,以下为四种可以使用的舍入模式:

  • NSRoundDown:接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
  • NSRoundUp:舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
  • NSRoundPlain:传统的四舍五入模式。
  • NSRoundBankers:银行家舍入模式。如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

返回值NSCalculationError表示在调用过程中是否遇到错误。如果没有错误,就会返回NSCalculationNoError。如果发生错误,这个函数会返回以下值之一:

  • NSCalculationLossOfPrecision
  • NSCalculationOverflow
  • NSCalculationUnderflow

关于这些错误,可以在以下函数文档的NSDecimalNumberBehaviors描述中了解:exceptionDuringOperation:error:leftOperand:rightOperand:

了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalSubtract

从一个十进制数值中减去另一个十进制数值。

声明
1
NSCalculationError NSDecimalSubtract(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);
细节参考

从左操作数(leftOperand)中减去右操作数(rightOperand),并使用指定的舍入模式处理后将结果存在result中。
更多舍入模式内容可以参考上面的NSDecimalAdd。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalDivide

将一个十进制数值除以另一个十进制数值。

声明
1
NSCalculationError NSDecimalDivide(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);
细节参考

使用右操作数(rightOperand)除左操作数(leftOperand)得出商,并使用指定的舍入模式舍入后将结果存在result参数中。如果右操作数为0,将会返回NSDivideByZero(除0错误)。
更多舍入模式内容可以参考上面的NSDecimalAdd。
需要注意的是,这里无法精确表示重复小数或者小数点尾数大于38位的数字。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalDivide

将两个十进制数值进行相乘操作。

声明
1
NSCalculationError NSDecimalMultiply(NSDecimal *result, const NSDecimal *leftOperand, const NSDecimal *rightOperand, NSRoundingMode roundingMode);
细节参考

将左操作数(leftOperand)和右操作数(rightOperand)进行相乘,并对结果使用指定的舍入模式进行舍入,将结果存在result中。
更多舍入模式内容可以参考上面的NSDecimalAdd。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalMultiplyByPowerOf10

10的N次方与指定的数值进行相乘运算。

声明
1
NSCalculationError NSDecimalMultiplyByPowerOf10(NSDecimal *result, const NSDecimal *number, short power, NSRoundingMode roundingMode);
细节参考

将指定的数值(number)与指定的10的次方(power)结果进行相乘运算,运算结果使用指定舍入模式进行舍入后将结果存在result中。
更多舍入模式内容可以参考上面的NSDecimalAdd。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalRound

十进制数据的舍入操作方法。

声明
1
void NSDecimalRound(NSDecimal *result, const NSDecimal *number, NSInteger scale, NSRoundingMode roundingMode);
细节参考

按指定模式和位数和舍入模式进行舍入操作,并将结果存在result中。
其中比例(scale)参数指定结果在小数点后可以具有的位数。
roundingMode决定了怎么舍入。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalPower

对一个数值进行N次方操作。

声明
1
NSCalculationError NSDecimalPower(NSDecimal *result, const NSDecimal *number, NSUInteger power, NSRoundingMode roundingMode);
细节参考

将数值(number)进行N次方(power)操作,并使用指定的舍入模式进行舍入操作后将结果保存在result中。
更多舍入模式内容可以参考上面的NSDecimalAdd。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSDecimalNormalize

将两个数值进行科学计数法转换为同样的格式以简化运算过程。

声明
1
NSCalculationError NSDecimalNormalize(NSDecimal *number1, NSDecimal *number2, NSRoundingMode roundingMode);
细节参考

NSDecimal实例在内存中以尾数和指数形式保存,以尾数x10^指数的形式表示。比如数值100有以下表示法:

尾数 指数
100 0
10 1
1 2

NSDecimalNormalize函数将number1和number2格式化为具有相同的指数的形式。
在具有相同的指数尾数后使得相加和相减操作变得十分方便,而NSDecimalAdd和NSDecimalSubtract两个方法实际上内部也调用了NSDecimalNormalize。
更多舍入模式内容可以参考上面的NSDecimalAdd。
了解更多信息,可以参考:Introduction to Numbers and Other Values

NSRoundingMode

这里面的常量指定了不同的舍入模式。

概述

只有scale方法设置NSDecimalNumber返回值精度限制时,舍入模式才有作用。如果scale返回为NSDecimalNoScale则无效。假设scale方法返回1,则各种不同的舍入模式对原始数据的舍入结果举例如下:

原始数据 NSRoundPlain NSRoundDown & NS RoundUp NSRoundBankers
1.24 1.2 1.2 & 1.3 1.2
1.26 1.3 1.2 & 1.3 1.3
1.25 1.3 1.2 & 1.3 1.2
1.35 1.4 1.3 & 1.4 1.4
-1.35 -1.4 -1.4 & -1.3 -1.4
常量
  • NSRoundDown:接近零的舍入模式。在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。
  • NSRoundUp:舍入远离零的舍入模式。在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。
  • NSRoundPlain:传统的四舍五入模式。
  • NSRoundBankers:银行家舍入模式。如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

NSCalculationError

用来描述在exceptionDuringOperation:error:leftOperand:rightOperand:方法中的计算错误常量。

常量
NSCalculationNoError

表示无错误发生的常量。

NSCalculationLossOfPrecision

该数值无法用38位有效数字来表示。

NSCalculationOverflow

数值太大导致上溢出。

NSCalculationUnderflow

数值太小导致下溢出。

NSCalculationDivideByZero

除0错误。


文档原文链接:https://developer.apple.com/documentation/foundation/numbers_data_and_basic_values?language=objc


Numbers部分未完待续

文章作者: Kevin Wu
文章链接: https://kevinwu.cn/p/6f0ba51/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 KevinWu的博客
支付宝打赏