将厘米转换为英尺和英寸,反之亦然不同的输出?

Rah*_*yas 4 objective-c data-conversion

我使用以下代码将厘米转换为英尺和英寸,但它不能按预期工作.

+ (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)];
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码将英尺和英寸的字符串转换为厘米

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

            self.heightInCm = totalInches * 2.54;
Run Code Online (Sandbox Code Playgroud)

但是,当我转换self.heightInCm回英尺和英寸时,它没有提供正确的价值.可能有人发布了一个完美的工作示例

Sul*_*han 8

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

你遇到的问题可能是由于这样一个事实,即当转换为英尺和英寸时,你正在四舍五入.

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

例如,5'11'180,3 cm.6'0182,8cm.这两个值之间的任何东西(例如181,182,183将得到圆要么5'116'0).

正确的解决方案取决于您的使用案例.如果您只向用户显示值,请将它们保持为厘米,并在显示时仅转换为英尺和英寸.如果您的用户输入了值,则无法使其更精确,但您可以接受/显示英寸作为十进制值(替换roundf(myInches)为just myInches和use [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)];
Run Code Online (Sandbox Code Playgroud)

这将很容易解决12英寸问题,因为圆形应用于以英寸为单位的总长度.


Kev*_*inB 5

这是 Swift 版本,用于将厘米转换为英尺和英寸:

快速 4

func showFootAndInchesFromCm(_ cms: Double) -> String {

      let feet = cms * 0.0328084
      let feetShow = Int(floor(feet))
      let feetRest: Double = ((feet * 100).truncatingRemainder(dividingBy: 100) / 100)
      let inches = Int(floor(feetRest * 12))

      return "\(feetShow)' \(inches)\""
}
Run Code Online (Sandbox Code Playgroud)