วิธีการหนึ่งโยนdoubleไปdecimalซึ่งจะใช้เมื่อทำพัฒนาสกุลเงิน ไม่Mไปไหน?
decimal dtot = (decimal)(doubleTotal);
วิธีการหนึ่งโยนdoubleไปdecimalซึ่งจะใช้เมื่อทำพัฒนาสกุลเงิน ไม่Mไปไหน?
decimal dtot = (decimal)(doubleTotal);
คำตอบ:
คุณใช้Mสำหรับลิเทอรัลตัวเลขเท่านั้นเมื่อคุณแคสต์มันเป็นเพียง:
decimal dtot = (decimal)doubleTotal;
โปรดทราบว่าตัวเลขทศนิยมไม่เหมาะที่จะเก็บค่าที่แน่นอนไว้ดังนั้นหากคุณบวกตัวเลขเข้าด้วยกันก่อนแล้วจึงแปลงเป็นDecimalคุณอาจได้รับข้อผิดพลาดในการปัดเศษ คุณอาจต้องการแปลงตัวเลขเป็นDecimalก่อนที่จะรวมเข้าด้วยกันหรือตรวจสอบให้แน่ใจว่าตัวเลขนั้นไม่ใช่ตัวเลขทศนิยมตั้งแต่แรก
คุณสามารถเพิ่มทวีคูณเป็นทศนิยมเช่นนี้โดยไม่จำเป็นต้องมีMคำต่อท้ายตามตัวอักษร:
double dbl = 1.2345D;
decimal dec = (decimal) dbl;
คุณควรใช้Mเมื่อประกาศค่าทศนิยมตามตัวอักษรใหม่:
decimal dec = 123.45M;
(หากไม่มีM123.45 จะถือว่าเป็นสองเท่าและจะไม่รวบรวม)
ใช้คลาสการแปลงเริ่มต้น: Convert.ToDecimal(Double)
Convert.ToDecimal(the double you are trying to convert);
doubleถึงdecimalเป็นเนื่องจากdoubleค่าเช่น (1000000.0 / 3.0) ในบางกรณี ต้องการคลิปความแม่นยำ "ส่วนเกิน" ที่ให้ผล 333333.333333333D แต่ในกรณีอื่น ๆ เราต้องการเก็บรักษาไว้โดยให้ผล 333333.333333333313931D แทนที่จะพูดว่า "แปลงเป็นทศนิยม" โค้ดควรระบุว่าควรดำเนินการแปลงอย่างไร
Convert.ToDecimal(double)นั้นเหมือนกับ(decimal)doubleTotalยกเว้นถ้าdoubleTotalเปลี่ยนเป็นประเภทอื่นคุณอาจหลีกเลี่ยงข้อผิดพลาดเวลาคอมไพล์และแนะนำข้อผิดพลาดรันไทม์ที่หายากกว่าเนื่องจากToDecimal ที่แตกต่างกันการแทนที่อาจถูกเรียก ผู้ดำเนินรายการมีความชัดเจนกว่ามาก ...
นี่เป็นคำถามเก่าและฉันได้ใช้คำตอบบางส่วนที่แสดงไว้ที่นี่ อย่างไรก็ตามในสถานการณ์โดยเฉพาะอย่างยิ่งของฉันมันเป็นไปได้ว่าdoubleค่าที่ผมอยากจะแปลงไปก็มักจะมีขนาดใหญ่กว่าdecimal decimal.MaxValueดังนั้นแทนที่จะจัดการข้อยกเว้นฉันเขียนวิธีการขยายนี้:
public static decimal ToDecimal(this double @double) =>
@double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;
วิธีการข้างต้นใช้งานได้หากคุณไม่ต้องการกังวลกับการจัดการข้อยกเว้นล้นและหากสิ่งนั้นเกิดขึ้นคุณต้องการเพียงแค่รักษาค่าสูงสุดที่เป็นไปได้ (กรณีของฉัน) แต่ฉันทราบว่าสำหรับสถานการณ์อื่น ๆ อีกมากมายสิ่งนี้จะไม่ใช่พฤติกรรมที่คาดไว้ และอาจจำเป็นต้องมีการจัดการข้อยกเว้น