2016-02-29 267 views
2

我正在使用以下代码将厘米转换为英尺和英寸,但不能按预期工作。厘米转换为英尺和英寸,反之亦然不同的输出?

+ (NSString*)getfeetAndInches:(float)centimeter { 
    float totalHeight = centimeter * 0.032808; 
    float myFeet = (int)totalHeight; //returns 5 feet 
    float myInches = fabsf((totalHeight - myFeet) * 12); 
    NSLog(@"%f",myInches); 


    return [NSString stringWithFormat:@"%d' %0.0f\"",(int)myFeet,roundf(myInches)]; 
} 

我用下面的代码英尺和英寸字符串转换成厘米

NSInteger totalInches = ([self.Feets integerValue] * 12) + [self.Inches integerValue]; 

      self.heightInCm = totalInches * 2.54; 

但是当我转换self.heightInCm回到英尺和英寸它不提供正确的value.Could有人张贴这个完美的工作示例

+0

我不知道这个问题,请指导正确的方法 –

+0

你期待什么 - 你从代码中得到了什么? – CouchDeveloper

回答

8

通常,您的代码可以正常工作。有一些小问题,例如fabsf是没有必要的,但从我的测试它运作良好。

您所遇到的问题可能是由以下事实引起的:转换为英尺和英寸时,您将舍入值。

一英寸等于2.54 cm。如果将英寸舍入为整数值,则最大精度将为2.54 cm

例如,5'11'180,3 cm6'0182,8cm。这两个值之间的任何值(例如,181,182,183将被舍入为5'116'0)。

正确的解决方案取决于您的使用案例。如果您只向用户展示这些值,请将它们保持为厘米,并且仅在显示时将其转换为英寸&英寸。如果您的用户输入值,则无法使其更精确,但可以接受/显示英寸作为十进制值(替换roundf(myInches)只需myInches并使用[self.inches floatValue])。

从评论中,当英寸计算为11.8四舍五入为12时,您也有舍入问题,这在结果中没有意义。我建议算法返工为以下:

const float INCH_IN_CM = 2.54; 

NSInteger numInches = (NSInteger) roundf(centimeter/INCH_IN_CM); 
NSInteger feet = numInches/12; 
NSInteger inches = numInches % 12; 

return [NSString stringWithFormat:@"%@' %@\"", @(feet), @(inches)]; 

,因为圆形是英寸,适用于总长度,可以轻松解决12英寸问题。

+0

我正在转换它们时显示,但是当转换字符串厘米,然后厘米到feets和英寸它给了我错误的结果。例如7英尺和0英寸转换为厘米给出213,但是当将213转换为英尺和英寸时,我获得了6英尺和12英寸 –

+0

@RahulVyas这是因为您正确计算了“6英尺”和“11.8英寸”,但是您将英寸到'12'。最简单的解决方法是将cm => inches计算返回到以下内容:1.将cm转换为英寸(不是英尺)2.将英寸转换为整数(并将其保存为“NSInteger”)3.将NSInteger英尺= totalInches/12; NSInteger英寸= totalInches%12'。通过将舍入移至算法的开始处,您不会再遇到12英寸问题。 – Sulthan

+0

我应该更新其他函数以及将字符串(英尺和英寸)转换为厘米吗? –

相关问题