MrPenguin9
Оригинален плакат- 1 август 2008 г
- 13 май 2009 г
Благодаря
SilentPanda
Почетен модератор
- 8 октомври 2002 г
- Бамбуковата гора
- 13 май 2009 г
MrPenguin9
Оригинален плакат- 1 август 2008 г
- 13 май 2009 г
Благодаря
PhoneyDeveloper
- 2 септември 2008 г
- 13 май 2009 г
Има ли нещо повече?
Опитайте да напишете това в терминала или го гугъл
човек грях М
MrPenguin9
Оригинален плакат- 1 август 2008 г
- 13 май 2009 г
Благодаря Р
Рон С
- 18 юли 2008 г
- Район Чикаго
- 13 май 2009 г
MrPenguin9 каза: Но когато направя 'tan(1)' в xcode, той ми връща 1556013989!?!? Но тенът на 1 е 0,017455... Какво правя нередно?
Благодаря
1556013989? Може просто да отпечатва стойност, форматирана с плаваща запетая, като цяло число без преобразуването на типа?
Откъде получавате тази функция tan()? math.h? Какъв тип връща tan(), например? Отнема ли радиани или градуси? В какъв тип съхранявате връщаната стойност?
Проверих man страницата за tan() и тя казва:
Код: |_+_| Така че.... единствената функция, която съответства на този подпис, взема двойно (автоматично преобразуване) и връща двойно (също автоматично преобразуване) и приема радиани.
Как гледате на стойността? Как изглежда вашият код?
РЕДАКТИРАНЕ: Току-що проверих стойността на tan (1 радиан) в Calculator.app - пише: 1,557408. И така... защо мислиш, че трябва да е 0,017455? Това е стойността на тен (1 ГРАДУС) М
MrPenguin9
Оригинален плакат- 1 август 2008 г
- 13 май 2009 г
Guiyon
- 19 април 2008 г
- Кеймбридж, Масачузетс
- 13 май 2009 г
MrPenguin9 каза: -(void)awakeFromNib {
Text.text = [NSString stringWithFormat'%d', tan(1)];
}
Ето вашият проблем, tan връща двойно, но низът във формат %d очаква цяло число. Промяната на '%d' на '%lf' трябва да поправи това. Въвеждането на 'man 3 printf' на терминала ще ви даде много повече информация за форматните низове в стил printf, които Apple (и много други библиотеки) използват; потърсете частта, която започва с „Форматният низ е съставен от нула или повече директиви“ Р
Рон С
- 18 юли 2008 г
- Район Чикаго
- 14 май 2009 г
Guiyon каза: Това е вашият проблем, tan връща двойно, но форматният низ %d очаква цяло число. Промяната на '%d' на '%lf' трябва да поправи това. Въвеждането на 'man 3 printf' на терминала ще ви даде много повече информация за форматните низове в стил printf, които Apple (и много други библиотеки) използват; потърсете частта, която започва с „Форматният низ е съставен от нула или повече директиви“
Тези 'магически' преобразувания на тип не се случват, освен ако компилаторът не знае, че трябва да има такова. Един случай, в който няма да знае, е в код като stringWithFormat: - той всъщност не знае, че трябва да има преобразуване, така че весело предава двойна. След като започнете да играете с типове с плаваща запетая, трябва да обърнете внимание на това.
Друга кратка бележка за типовете с плаваща запетая. Не пишете код като: Код: |_+_| Проблемът с типовете = и с плаваща запетая е, че е малко вероятно те да бъдат равни. Дори нещо като: Код: |_+_| На вашата бяла дъска тези числа са еднакви. Не е задължително да са вътре в компютъра. Странно е, но трябва да свикнеш. М
MrPenguin9
Оригинален плакат- 1 август 2008 г
- 15 май 2009 г
Благодаря на всички, че ми помогнахте!
Популярни Публикации