To Feet and Inches
This commit is contained in:
@@ -558,3 +558,34 @@ extension UnitValue where ValueType: ConvertibleToDouble { // Apply constraints
|
|||||||
public var mph: UnitValue<Double>? { converted(to: .milesPerHour) }
|
public var mph: UnitValue<Double>? { converted(to: .milesPerHour) }
|
||||||
public var kn: UnitValue<Double>? { converted(to: .knots) }
|
public var kn: UnitValue<Double>? { converted(to: .knots) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Height Conversion Extensions
|
||||||
|
extension UnitValue where ValueType: ConvertibleToDouble {
|
||||||
|
/// Converts a length UnitValue (e.g., in cm) to feet and inches.
|
||||||
|
/// Returns nil if the category is not length.
|
||||||
|
public func toFeetAndInches(maximumFractionDigits: Int = 2) -> String? {
|
||||||
|
guard unit.category == .length else { return nil }
|
||||||
|
guard let totalInches = converted(to: .inch)?.value else { return nil }
|
||||||
|
let feet = Int(totalInches / 12)
|
||||||
|
let inches = totalInches.truncatingRemainder(dividingBy: 12)
|
||||||
|
let formatter = NumberFormatter()
|
||||||
|
formatter.maximumFractionDigits = maximumFractionDigits
|
||||||
|
formatter.minimumFractionDigits = 0
|
||||||
|
formatter.numberStyle = .decimal
|
||||||
|
guard
|
||||||
|
let formattedInches = formatter.string(
|
||||||
|
from: NSNumber(value: inches))
|
||||||
|
else { return nil }
|
||||||
|
return "\(feet) ft \(formattedInches) in"
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Creates a UnitValue in a target unit (e.g., cm) from feet and inches.
|
||||||
|
public static func from(feet: Int, inches: Double, to targetUnit: Unit)
|
||||||
|
-> UnitValue<Double>?
|
||||||
|
{
|
||||||
|
guard targetUnit.category == .length else { return nil }
|
||||||
|
let totalInches = Double(feet) * 12 + inches
|
||||||
|
let inchesValue = totalInches.in
|
||||||
|
return inchesValue.converted(to: targetUnit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user