การสูญเสียเศษส่วนที่เป็นไปได้


119

ยกโทษให้ฉันหากนี่เป็นคำถามที่ไร้เดียงสาอย่างไรก็ตามวันนี้ฉันสูญเสีย

ฉันมีการคำนวณการหารง่ายๆดังนี้:

double returnValue = (myObject.Value / 10);

ค่าเป็น int ในวัตถุ

ฉันได้รับข้อความที่ระบุว่าการสูญเสียเศษส่วนที่เป็นไปได้ อย่างไรก็ตามเมื่อฉันเปลี่ยนคู่เป็น int ข้อความจะหายไป

มีความคิดว่าทำไมสิ่งนี้ถึงเกิดขึ้น?


ขอบคุณทุกการตอบรับที่ดี มันสมเหตุสมผลแล้วที่คุณสูญเสียจุดทศนิยมเมื่อหาร 2 ค่า int
CodeLikeBeaker

คำตอบ:


168

เมื่อคุณหารสอง int เป็นค่าทศนิยมส่วนเศษจะหายไป หากคุณโยนไอเท็มชิ้นใดชิ้นหนึ่งให้ลอยคุณจะไม่ได้รับข้อผิดพลาดนี้

ตัวอย่างเช่นเปลี่ยน 10 เป็น 10.0

double returnValue = (myObject.Value / 10.0);

57

คุณกำลังทำการหารจำนวนเต็มถ้าmyObject.Valueเป็น int เนื่องจากทั้งสองด้าน/เป็นประเภทจำนวนเต็ม

ในการหารทศนิยมหนึ่งในตัวเลขในนิพจน์ต้องเป็นประเภททศนิยม นั่นจะเป็นจริงถ้า myObject.Value เป็นสองเท่าหรืออย่างใดอย่างหนึ่งต่อไปนี้:

double returnValue = myObject.Value / 10.0;
double returnValue = myObject.Value / 10d; //"d" is the double suffix
double returnValue = (double)myObject.Value / 10;
double returnValue = myObject.Value / (double)10;


7

สมมติว่าmyObject.Valueเป็นintสมการmyObject.Value / 10จะเป็นการหารจำนวนเต็มซึ่งจะถูกโยนให้เป็นสองเท่า

นั่นหมายความว่า myObject.Value เป็น 12 จะส่งผลให้ returnValue กลายเป็น 1 ไม่ใช่ 1.2

คุณต้องแคสต์ค่าก่อน:

double returnValue = (double)(myObject.Value) / 10.0;

สิ่งนี้จะส่งผลให้ค่าที่ถูกต้อง 1.2 อย่างน้อยที่สุดเท่าที่ถูกต้องจะอนุญาตให้มีข้อ จำกัด แต่จะกล่าวถึงในที่อื่น ๆ เกี่ยวกับ SO เกือบจะไม่มีที่สิ้นสุด :-)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.