ฉันกำลังพยายามแบ่งส่วนง่ายๆใน Go
fmt.Println(3/10)
สิ่งนี้จะพิมพ์ 0 แทนที่จะเป็น 0.3 นี่เป็นเรื่องแปลก ใครช่วยบอกเหตุผลที่อยู่เบื้องหลังเรื่องนี้ได้ไหม ฉันต้องการดำเนินการทางคณิตศาสตร์ที่แตกต่างกันใน Go
ขอบคุณ
ฉันกำลังพยายามแบ่งส่วนง่ายๆใน Go
fmt.Println(3/10)
สิ่งนี้จะพิมพ์ 0 แทนที่จะเป็น 0.3 นี่เป็นเรื่องแปลก ใครช่วยบอกเหตุผลที่อยู่เบื้องหลังเรื่องนี้ได้ไหม ฉันต้องการดำเนินการทางคณิตศาสตร์ที่แตกต่างกันใน Go
ขอบคุณ
คำตอบ:
นิพจน์3 / 10
เป็นนิพจน์คงที่ที่ไม่ถูกพิมพ์ ข้อกำหนด กล่าวเกี่ยวกับนิพจน์คงที่
หากตัวถูกดำเนินการของการดำเนินการไบนารีเป็นค่าคงที่ที่ไม่ได้พิมพ์ชนิดต่างๆการดำเนินการและสำหรับการดำเนินการที่ไม่ใช่บูลีนผลลัพธ์จะใช้ชนิดที่ปรากฏในภายหลังในรายการนี้: จำนวนเต็ม, รูน, จุดลอยตัว, เชิงซ้อน
เนื่องจาก3
และ10
เป็นค่าคงที่จำนวนเต็มที่ไม่ได้พิมพ์ค่าของนิพจน์จึงเป็นจำนวนเต็มที่ไม่ได้พิมพ์ ( 0
ในกรณีนี้)
ตัวถูกดำเนินการตัวใดตัวหนึ่งต้องเป็นค่าคงที่จุดลอยตัวเพื่อให้ผลลัพธ์เป็นค่าคงที่จุดลอยตัว นิพจน์ต่อไปนี้ประเมินค่าคงที่ทศนิยมที่ไม่ได้พิมพ์0.3
:
3.0 / 10.0
3.0 / 10
3 / 10.0
นอกจากนี้ยังสามารถใช้ค่าคงที่พิมพ์ได้ นิพจน์ต่อไปนี้ประเมินfloat64
ค่าคงที่0.3
:
float64(3) / float64(10)
float64(3) / 10
3 / float64(10)
พิมพ์ใด ๆ 0.3
ของการแสดงออกดังกล่าวข้างต้นจะพิมพ์ ยกตัวอย่างเช่นการพิมพ์fmt.Println(3.0 / 10)
0.3
fmt.Println(float64(3) / float64(10))
ให้0.3
.