2015-03-12 4 views
0

Я пытаюсь построить калькулятор градусов/радианов. Вот функции, которые у меня есть.Pi Output In Swift

func degreesToRadians(degrees: Double) -> Double { 

    return degrees * (M_PI/180) 

} 

func radiansToDegrees(radians: Double) -> Double { 

    return radians * (180/M_PI) 

} 

degreesToRadians(90) 

radiansToDegrees(M_PI/4) 

degreesToRadians (90) возвращает 1.5707963267949 radiansToDegrees (M_PI/4) возвращает 45,0

То, что я хочу, чтобы это произошло в Градусы к функции радианах вместо 1.5707963267949 я хочу выход быть я/2 , Возможно ли это?

Спасибо.

+0

'degreesToRadians' вернуться в два раза. –

ответ

0

Представлять 90 градусов, как π/2, что вы хотите сделать, это

  • рассматривать долю degrees над 180 (то есть числитель degrees и знаменателя 180);

  • уменьшить эту долю (т. Е. Делить числитель и знаменатель на greatest common factor); в случае наибольшим общим фактором является, фактически, 90, что дает уменьшенный числитель 1 и уменьшенный знаменатель 2;

  • результат в виде строкового представления фракции, то есть что-то вроде

    "\(reducedNumerator)π/\(reducedDenominator)" 
    

    Очевидно, что если либо числитель или знаменатель 1, то вы можете подавить эту часть строки, но, надеюсь, вы получите Основная идея.

Примите во внимание трещину.

0

Если вы хотите точно: «π/2», я не думаю, что это возможно с двойным. Вы можете получить это в String, но не в количестве. Я думаю, что ваш лучший вариант - взять необязательный параметр bool, в результате которого результат возвращается как кратное pi.

degreesToRadians(90, resultAsMultipleOfPi:true) 

Если этот bool истинен, то 0,5 должен быть возвращен. Возможно, вам понадобится округлить, чтобы получить округленные цифры.

+0

Вы изменили подпись неправильной функции ... –

+0

@IanMacDonald спасибо. Исправленный. – Taha

0

Если вы внимательно посмотрите на то, что на самом деле M_PI вы увидите, что это предопределенное двойное значение в math.h, что составляет

#define M_PI  3.14159265358979323846264338327950288 /* pi    */ 

Если вы хотите больше точности вы можете объявлять и использовать длинное двойное значение вместо этого.

-1

Вы можете напрямую использовать константу M_PI.

Если вам нужно в формате флоат просто использовать это,

let pi = Float(M_PI) 
+0

OP уже использует M_PI, это не то, что было задано. – Moritz