7
การแสดงออกของ C # ลอย: พฤติกรรมแปลก ๆ เมื่อส่งผลลอยไปยัง int
ฉันมีรหัสง่ายๆดังต่อไปนี้: int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp; speed1และspeed2ควรมีค่าเท่ากัน แต่อันที่จริงฉันมี: speed1 = 61 speed2 = 62 ฉันรู้ว่าฉันควรใช้ Math.Round แทนการคัดเลือกนักแสดง แต่ฉันต้องการที่จะเข้าใจว่าทำไมค่าต่างกัน ฉันดูโค้ดไบต์ที่สร้างขึ้น แต่ยกเว้นร้านค้าและโหลด opcodes เหมือนกัน ฉันยังลองรหัสเดียวกันใน java และฉันได้รับ 62 และ 62 อย่างถูกต้อง มีคนอธิบายเรื่องนี้ได้ไหม แก้ไข: ในรหัสจริงมันไม่ได้โดยตรง 6.2f * 10 แต่ฟังก์ชั่นการโทร * ค่าคงที่ ฉันมีรหัสไบต์ต่อไปนี้: …