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