>> DAVID เจลัน: ในขณะที่คุณอาจรู้ อุณหภูมิโดยการใช้
เครื่องชั่งที่แตกต่างกันในที่แตกต่างกัน ส่วนของโลก
ตัวอย่างเช่น 212 องศาฟาเรนไฮต์เป็น 100 องศาเซลเซียสและ 32 องศา
ฟาเรนไฮต์เป็น 0 องศาเซลเซียส
มันจะไม่ดีถ้าเรามีคอมพิวเตอร์ โปรแกรมที่ช่วยให้เราสามารถ
แปลงจากการพูดฟาเรนไฮต์ ที่จะเซลเซียส?
>> ดีเราสามารถเขียนโปรแกรมที่
Let 's แรกเริ่มต้นด้วยการรวม cs50.h, เพื่อให้เราสามารถใช้ฟังก์ชั่นที่เรียกว่า
ได้รับลอยที่เช่น int ได้รับได้รับ จำนวนจากผู้ใช้ แต่คราวนี้
จำนวนจุดลอย - หนึ่ง ด้วยจุดทศนิยม
>> ลอง ได้แก่ io.h มาตรฐาน เพื่อให้เราสามารถเข้าถึง
การทำงานเช่นการพิมพ์ฉ
และขอยังประกาศหลัก ในทางปกติ
>> ขอแจ้งให้ผู้ใช้ต่อไปสำหรับ อุณหภูมิในฟาเรนไฮต์
ตอนนี้ขอให้ได้รับจริงอุณหภูมิที่ จากผู้ใช้ครั้งแรกโดย
ประกาศตัวแปรที่เรียกว่า f ของประเภทลอย
ลอยอีกครั้งหมายถึงตัวแปรที่ เก็บค่าจุดลอย
หนึ่งที่มีจุดทศนิยม
>> ให้กำหนดผลตอบแทน ค่าของที่ได้รับลอย
แล้วให้ทำบิตของคณิตศาสตร์ มันเป็นครั้งแรกที่ประกาศลอยอื่น
ที่เรียกว่าเซลเซียสเซลเซียสและเก็บใน C ผลของบางอย่างทางคณิตศาสตร์ทั่วไป
5.0 หารด้วย 9.0 ครั้งลบ F 32.0
>> ตอนนี้ขอพิมพ์ผล การคำนวณนี้
ร้อยละฉ -
แสดงถึงตัวยึดสำหรับ ค่าลอยจุด -
จุลภาค C เพื่อพิมพ์ออกมา อุณหภูมิในเซลเซียส
ขอบันทึกครั้งสุดท้ายของฉัน
คอมไพล์ด้วย F ถึง C. เรียกโปรแกรม ด้วย F เฉือนจุดซี
>> และให้พยายามร่วมกันที่ อุณหภูมิ
212 องศาฟาเรนไฮต์ใน 100 องศาเซลเซียส
32 องศาฟาเรนไฮต์ในเป็น 0 องศาเซลเซียสใน
>> ตอนนี้ให้ปรับแต่งโปรแกรมนี้เพียงเล็กน้อย บิตโดยไม่พิมพ์ค่อนข้างมาก 0
หลังจากที่ทศนิยมที่
การทำเช่นนี้ฉันจะไป กลับไปที่เส้น 11
และมากกว่าเพียงแค่ระบุร้อยละฉ, ฉันจะระบุแทนการพูด
0.1 ฉแจ้งฉพิมพ์ที่ฉันเท่านั้น ต้องการพิมพ์ค่าจุดลอย
หนึ่งหลังจากค่าทศนิยม
>> ขอบันทึกโปรแกรมของฉัน
คอมไพล์ด้วยทำให้ F ถึง C. แล้ว วิ่งด้วย F เฉือนจุดที่ซีและ
ให้ลองใหม่อีกครั้งกับกล่าวว่า 212, ซึ่งทำให้ผม 100.0
>> ตอนนี้มันเป็นมูลค่า noting ที่ผมทำ อะไรบางอย่างที่จงใจในสาย 9
แจ้งให้ทราบว่าผมเขียน 5 5.0, 9 เป็น 9.0 และแม้แต่ 32 เป็น 32.0
ดีแรกที่สองของค่าเหล่านั้น มากจงใจเลือกที่จะเป็น
ค่าจุดลอยไม่เพียงเพราะ ของความสอดคล้องกับส่วนที่เหลือ
ของโปรแกรมของฉัน -
ซึ่งเห็นได้ชัดว่าเกี่ยวข้องกับการลอย ค่าจุด -
แต่เพราะมันจะเปิดออกซีว่าถ้าคุณ แบ่ง int โดย int อื่น
คำตอบที่ทำให้คุณจะได้รับคือ int ตัวเองแม้ว่าที่หมายถึง
ต้องทิ้งทุกอย่าง หลังจุดทศนิยม
>> ในคำอื่น ๆ ถ้าผมเปลี่ยนไปนี้ 5.0 5 หรือนี้ 9.0-9 แล้วบันทึก
โปรแกรมของฉันคอมไพล์ด้วยทำให้ F ถึงซี แล้วกลับใช้มันด้วยจุดเฉือน F
ที่ C และประเภทในการป้อนข้อมูลเช่น 212, แจ้งให้ทราบว่าคำตอบที่ฉันกำลังจะไป
ได้รับในครั้งนี้เป็นจริงที่ไม่ถูกต้องมาก
0.0 ไม่ได้เป็นระดับที่ถูกต้องใน 212 องศาเซลเซียสเป็นฟาเรนไฮต์
>> ดีสิ่งที่เกิดขึ้น
ทั้งในสาย 9, 5 เพราะตอนนี้ก็คือ จำนวนเต็มและเนื่องจาก 9 ขณะนี้
จำนวนเต็มผลทางคณิตศาสตร์ ควรจะเป็น 0.5555 และอื่น ๆ
แต่เนื่องจากผลตาม กฎซี, จะต้องมี int ที่
.5555 ได้รับการโยนทิ้งไป ออกจากเรามีเพียง 0
>> ดังนั้นในท้ายที่สุดฉันท้ายคูณ ค่อนข้างตั้งใจ 0 ครั้งฉลบ
32.0 ซึ่งเป็นไม่ว่าสิ่งที่ เสมอไปให้ฉัน 0
จึงเก็บไว้ในใจตลอดเวลาโดยใช้ ค่าจุดที่ลอยอยู่ในความใกล้ชิดของ
ints คุณอาจไม่จำเป็นต้อง เพื่อให้ได้คำตอบที่คุณคาดหวัง
และเพื่อดูแลการใช้งานที่ผมทำใน ค่ากรณีแรก, จุดลอย
ตลอดทั้งเพื่อหลีกเลี่ยงปัญหาดังกล่าว