我需要最有效地在有限宽度的区域中打印浮点值 . 我正在使用 NSNumberFormatter
,并且我将小数点后面的两个数字设置为默认值,这样当我有一个像 234.25
这样的数字时,它按原样打印: 234.25
. 但是当我有 1234.25
时,我希望它打印为: 1234.3
, 11234.25
应打印 11234
.
我需要在该点后最多两位数,如果我在该点之后有数字,则最多总共五位数,但如果整数部分有更多,则还应打印超过五位数 .
我认为没有能力限制 NSNumberFormatter
中的总位数 . 这是否意味着我应该用这种方式编写自己的函数来格式化数字?如果是这样,那么获取数字的整数和小数部分中的数字位数的正确方法是什么?我也更喜欢使用 CGFLoat
而不是 NSNumber
以避免额外的类型转换 .
4 回答
您正在寻找"maximum significant digits"和"maximum fraction digits"的组合,以及特定的舍入行为 .
NSNumberFormatter
等于任务:结果:
Code :
Testing it :
Output :
以下是我在代码中实现此操作的方法 . 我不知道它有多高效,我希望不错 .
所以我创建了一个全局的NSNumberFormatter
并在某处初始化它:
然后我使用以下函数格式化数字:
在iOS 8上的
NSNumberForamtter
上一起使用maximumFractionDigits
和maximumSignificantDigits
时,这是一个错误吗?如果我只使用
maximumFractionDigits
它工作正常NSNumberFormatter maximumFractionDigits and maximumSignificantDigits bug