使用unicode的分数的NSString表示

我正在试图“很好地”在iPhone应用程序中显示分数。 以前我一直在使用一个繁琐的开关语句,导致硬编码unicode字符的粗俗分数,但我已经了解了unicode分数斜杠字符,如果我正确理解,应该意味着我可以创build一个string如下:

[NSString stringWithFormat:@"%i\u2044%i",numerator,denominator]; 

“渲染器”将自动打印一个更小的分子和下标分母。 不过,上面的代码只是给了我标准的1/2外观。 我正在使用drawAtPoint将string放在屏幕上。 我已经尝试了decomposedStringUsingCanonicalMapping和precomposedStringUsingCanonicalMapping,但说实话,文档丢失了我。

如果这工作或NSString绘图不应付这个?

我不知道有任何方法让unicodeangular色具有您描述的属性。 AFAIK区分U + 2044与常规斜线的唯一区别在于它更加有angular度,两侧几乎没有空间,因此使它与周围的数字更接近。

这里有一个关于在HTML中使用Fraction Slash 的页面 ,正如你所看到的,它表明,如果你自己尝试和使用它,你只需要得到像“1/10”的东西。 它通过在周围的数字上使用HTML中的<sup><sub>标签来获得适当的显示来弥补这一点。

为了让你在NSString中工作,你将不得不找出一些方法来将自身的上标和下标应用到周围的数字中。

我碰巧只想简单的分数的食谱转换为Unicode粗俗分数。

这里是你如何做到这一点:

 CGFloat quantityValue = 0.25f; NSString *quantity = nil; if (quantityValue == 0.25f) { // 1/4 const unichar quarter = 0xbc; quantity = [NSString stringWithCharacters:&quarter length:1]; } else if (quantityValue == 0.33f) { // 1/3 const unichar third = 0x2153; quantity = [NSString stringWithCharacters:&third length:1]; } else if (quantityValue == 0.5f) { // 1/2 const unichar half = 0xbd; quantity = [NSString stringWithCharacters:&half length:1]; } else if (quantityValue == 0.66f) { // 2/3 const unichar twoThirds = 0x2154; quantity = [NSString stringWithCharacters:&twoThirds length:1]; } else if (quantityValue == 0.75f) { // 3/4 const unichar threeQuarters = 0xbe; quantity = [NSString stringWithCharacters:&threeQuarters length:1]; } NSLog(@"%@", quantity); 

有一些包括Unicode字符,实际上分数出现,但他们被限制为1/2,1/3和1/4我认为。

如果你想这个任意分数,在我看来,你需要一个自定义的视图,绘制适当的外观; 通过使用定位子视图或drawRect:

我知道这是很久以前,但如果有帮助,所有的小数都有上标Unicode字符,您可以用它来显示大多数字体的任意分数; 请参阅此处的类似问题的答案 – https://stackoverflow.com/a/30860163/4522315

编辑:

根据评论,这个解决scheme取决于你使用的字体。 Amsi Pro(左)和其他商业字体倾向于包含上标所需的所有符号,但系统字体(右)不包含。

尼斯字体系统字体