作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] 科学表示法
时间Thu Jun 26 10:43:01 2014
※ 引述《Starwindd (原PO大叔)》之铭言:
: 请问一下,obj-c里头有没有方法可以直接把一个数字转换成科学记数法,
: a*10^b ,并且分开知道 a 跟 b 的值?
: 我不是要问表示成 3.75E+06 这个方法,而是要分开得到 3.75 跟 6 这
: 两个值。
: 因为想要在画面上显示 3.75 * 10^6 这样,怕有些使用者看不懂用E的表
: 示法。
: 我试着用 NSDecimalNumber ,不过没成功...
所以你其实只是想要把 3750000 (举例) 转成 3.75 * 10^6 这个字串
不见得一定要得到 3.75 与 6 这两个数字吧?
这样的话可以是自己写一个 NSFormatter subclass
以你的需求而言, 最简单的方法应该是直接继承 NSNumberFormatter
然後复写 -stringFromNumber: (与 -numberFromString:, 如果你需要反向转换)
因为 NSNumberFormatter 已经可以产出 3.75E6 这种格式
(把 numberStyle 设成 kCFNumberFormatterScientificStyle)
所以其实你可以直接偷懒...
- (NSString *)stringFromNumber:(NSNumber *)number
{
NSString *s = [super stringFromNumber:number];
s = [s stringByReplacingOccurrencesOfString:@"E" withString:@" * 10^"];
return s;
}
3750000
| NSNumberFormatter
v
3.75
E6
| Subclass
v
3.75
* 10^6
大概是这样做
小於 1 的数字会变成类似 3.75 * 10^-6
如果你还希望有更客制化的输出就用 NSRegularExpression 吧
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.94.57
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MacDev/M.1403750584.A.FE3.html
※ 编辑: uranusjr (140.112.94.57), 06/26/2014 10:44:50
1F:推 Starwindd:感谢。其实我是希望把它变成 3.75x10<sup>6</sup> 然後 06/26 21:20
2F:→ Starwindd:用UIWebView去显示出来。不过同样概念应该可以做。谢谢 06/26 21:20
3F:推 appleway:转成nsatributedstring, 次方用vertical-align:super 06/26 22:49