วิธีการหนึ่งโยน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;
(หากไม่มีM
123.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;
วิธีการข้างต้นใช้งานได้หากคุณไม่ต้องการกังวลกับการจัดการข้อยกเว้นล้นและหากสิ่งนั้นเกิดขึ้นคุณต้องการเพียงแค่รักษาค่าสูงสุดที่เป็นไปได้ (กรณีของฉัน) แต่ฉันทราบว่าสำหรับสถานการณ์อื่น ๆ อีกมากมายสิ่งนี้จะไม่ใช่พฤติกรรมที่คาดไว้ และอาจจำเป็นต้องมีการจัดการข้อยกเว้น