Re: [问题] 科学表示法

楼主: uranusjr (←這人是超級笨蛋)   2014-06-26 10:43:01
※ 引述《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.75E6
| Subclass
v
3.75 * 10^6
大概是这样做
小于 1 的数字会变成类似 3.75 * 10^-6
如果你还希望有更客制化的输出就用 NSRegularExpression 吧
作者: Starwindd (原PO大叔)   2014-06-26 21:20:00
感谢。其实我是希望把它变成 3.75x10<sup>6</sup> 然后用UIWebView去显示出来。不过同样概念应该可以做。谢谢
作者: appleway (苹果爱天空)   2014-06-26 22:49:00
转成nsatributedstring, 次方用vertical-align:super

Links booklink

Contact Us: admin [ a t ] ucptt.com