MrPenguin9
Originalaffisch- 1 augusti 2008
- 13 maj 2009
Tack
SilentPanda
Moderator emeritus
- 8 oktober 2002
- Bambuskogen
- 13 maj 2009
MrPenguin9
Originalaffisch- 1 augusti 2008
- 13 maj 2009
Tack
Phoney-utvecklare
- 2 september 2008
- 13 maj 2009
Finns det något mer?
Testa att skriva detta i terminalen eller googla det
man sin M
MrPenguin9
Originalaffisch- 1 augusti 2008
- 13 maj 2009
Tack R
Ron C
- 18 juli 2008
- Chicago-området
- 13 maj 2009
MrPenguin9 sa: Men när jag gör 'tan(1)' i xcode ger det mig tillbaka 1556013989!?!? Men solbrännan på 1 är 0,017455... Vad gör jag för fel?
Tack
1556013989? Det kanske bara är att skriva ut ett flyttalsformaterat värde som ett heltal utan typkonverteringen?
varifrån får du den här tan()-funktionen? matte.h? Vilken typ returnerar tan() till exempel? Tar det radianer eller grader? Vilken typ lagrar du returvärdet i?
Jag kollade på man-sidan för tan() och den säger:
Kod: |_+_| Så... den enda funktionen som matchar den signaturen tar en dubbel (automatisk konvertering) och returnerar en dubbel (även automatisk konvertering) och tar radianer.
Hur ser du på värdet? Hur ser din kod ut?
EDIT: Jag kollade precis värdet på tan(1 radian) i Calculator.app - det står: 1,557408. Så... varför tycker du att det ska vara 0,017455? Det är värdet av solbränna(1 DEGREE) M
MrPenguin9
Originalaffisch- 1 augusti 2008
- 13 maj 2009
Guiyon
- 19 april 2008
- Cambridge, MA
- 13 maj 2009
MrPenguin9 sa: -(void)awakeFromNib {
Text.text = [NSString stringWithFormat'%d', tan(1)];
}
Det är ditt problem, tan returnerar en dubbel men %d-formatsträngen förväntar sig ett heltal. Att ändra '%d' till '%lf' borde fixa det. Om du skriver 'man 3 printf' på terminalen får du mycket mer information om de formatsträngar i printf-stil som Apple (och många andra bibliotek) använder; leta efter delen som börjar med 'Formatsträngen består av noll eller fler direktiv' R
Ron C
- 18 juli 2008
- Chicago-området
- 14 maj 2009
Guiyon sa: Det är ditt problem, tan returnerar en dubbel men %d formatsträngen förväntar sig ett heltal. Att ändra '%d' till '%lf' borde fixa det. Om du skriver 'man 3 printf' på terminalen får du mycket mer information om de formatsträngar i printf-stil som Apple (och många andra bibliotek) använder; leta efter delen som börjar med 'Formatsträngen består av noll eller fler direktiv'
Dessa 'magiska' omvandlingar sker inte om inte kompilatorn vet att det borde finnas en. Ett fall där det inte kommer att veta är i kod som stringWithFormat: - det vet inte riktigt att det borde finnas en konvertering, så det passerar glatt en dubbel. När du väl börjar spela med flyttalstyper måste du vara uppmärksam på det.
En annan kort notering om flyttalstyper. Skriv inte kod som: Kod: |_+_| Problemet med = och flyttalstyper är att de är mycket osannolikt att vara lika. Till och med något som: Kod: |_+_| På din whiteboard är dessa siffror desamma. Inuti datorn behöver de inte vara det. Det är konstigt, men du måste vänja dig vid det. M
MrPenguin9
Originalaffisch- 1 augusti 2008
- 15 maj 2009
Tack alla för att ni hjälpte mig!
Populära Inlägg