在项目中使用 EngineeringNotationFormatter 的最简单方法是包含此 pod
pod 'EngineeringNotationFormatter'
然后您可以这样使用格式化函数
#import "DHengNotation.h"
...
DHToEngineeringString(4731230.f, 3, NO); // => 4.73 M
iOS 项目演示基于 C 的工程符号格式化程序,以及 Objective-C 包装器,并处理变量数字、样式和步进能力。
注意:Martin Moene 创建了一个非常棒的 C++ 版本,请参阅 https://github.com/martinmoene/EngFormat-Cpp
版本说明:v 1.2 - 在 Martin Moene 找到一些可能导致失败的边缘情况之后,重新编写了大部分代码 - 在 EngNotation.c 中可以启用或禁用日志消息 - 处理非正常浮点值并将 Nan、Infinite 等返回适当值 - 结合 Martin Moene 编写的单元测试(我们现在共享)v 1.0 - 初始发布,基本上是从 Jukka Korpela 那里得到的 i
历史记录
几年前,我遇到了一个很棒的 C 函数,可以将浮点数格式化为工程符号,无论是指数符号还是国际单位制(SI)符号。这段 C 代码是由 Jukka Korpela 编写的,并发布在 http://www.cs.tut.fi/~jkorpela/c/eng.html。
当您想显示长度等重要信息,使用人们(而不是机器)可以理解的方式时,这个函数很有用。因此,您可以将“1.67e4米”显示为“16.7e3米”,或者使用 SI 前缀(http://physics.nist.gov/cuu/Units/prefixes.html)作为“17.7 k米”。
正如 Jukka 所指出的,没有 POSIX(即 printf)格式化程序能做这件事,所以他写了一个。在使用他的代码时,我发现一个边缘情况并提供了更新后的代码,Jukka 大约在 2009 年将其附加到他的网页上。
代码有一个非常有趣的特点;可以指定有效数字的位数。例如,如果您将值设置为 4,则每个数字都会向上或向下舍入,使其恰好包含那么多数字。因此,您可以使用此代码提供一个浮点步进函数,该函数正好通过最低有效数字增减一个增量(或减量)。
还提供了一个反向函数,它接受指数或 SI 单位的字符串,并返回正确四舍五入的浮点数。
当然,这个功能不是许多人需要的,但如果您需要它,这段代码就非常有价值,我相信 Jukka 投入了大量时间在这段代码上。
所附iOS项目可用于实验各种设置
我们与您共同提供此代码,采用无归属的BSD风格许可(见源文件)。