M หมายถึงอะไรในสัญลักษณ์สัจพจน์ทศนิยม C #


311

เพื่อที่จะทำงานกับประเภทข้อมูลทศนิยมฉันต้องทำมันด้วยการเริ่มต้นตัวแปร:

decimal aValue = 50.0M;

ส่วน M หมายถึงอะไร

คำตอบ:


386

มันหมายความว่ามันเป็นตัวอักษรทศนิยมตามที่คนอื่นพูด อย่างไรก็ตามต้นกำเนิดอาจไม่ใช่คำแนะนำที่อื่นในคำตอบนี้ จากC # Annotated Standard (รุ่น ECMA ไม่ใช่รุ่น MS):

decimalต่อท้ายเป็น m / m ตั้งแต่ D / d doubleถูกนำตัวแล้วโดย แม้ว่าจะได้รับการแนะนำว่า M ย่อมาจากเงินปีเตอร์ Golde decimalจำได้ว่าเอ็มได้รับเลือกให้เป็นเพียงตัวอักษรที่ดีที่สุดต่อไปใน

คำอธิบายประกอบที่คล้ายกันกล่าวถึงเวอร์ชันแรก ๆ ของ C # ที่มี "Y" และ "S" สำหรับbyteและshortตัวอักษรตามลำดับ พวกเขาถูกทิ้งเพราะไม่มีประโยชน์บ่อยครั้งนัก


6
นั่นทำให้คำถามว่าทำไม E / e ไม่ใช่จดหมายที่ดีที่สุดต่อไป
VVS

61
"e" จะเป็นปัญหาในการใช้ตัวอักษรอยู่แล้ว ตัวอย่างเช่น "2e4m" เป็นตัวอักษรที่ถูกต้อง (ทศนิยม 20000) แม้ว่ามันจะไม่คลุมเครือ (และมันอาจจะเป็นไปได้แม้ว่า "1e" จะจบลงด้วยข้อความแสดงข้อผิดพลาดของผู้รวบรวมที่อยากรู้อยากเห็นว่ามันอยู่ในช่วงของคู่ที่ทำงานได้จริงไม่ใช่ว่ามันเป็น syntactically ไม่ถูกต้อง; ทำให้เกิดความสับสน "C" อาจจะทำให้รู้สึกไม่ก่อให้เกิดความสับสนใด ๆ แม้ว่ามันจะไม่มีข้อสงสัยขอแนะนำ "สกุลเงิน" เพื่อคน :)
จอน Skeet

7
"c" ขัดแย้งกับตัวอักษรตัวอักษรสำหรับสตริงใน VB.Net แม้ว่าจะมีไวยากรณ์แตกต่างกันเล็กน้อย
Joel Coehoorn

3
ฉันจะไม่มีปัญหามากเกินไปกับความแตกต่างใน C # และ VB VB มีไวยากรณ์ฐานสิบหกที่แตกต่างกันอยู่แล้วเช่น IIRC
Jon Skeet

9
หากคุณจัดโครงสร้างพยางค์ของ "ทศนิยม" คุณจะได้รับ "De Ci Mal" สิ่งเหล่านี้เหมาะสมที่สุดที่จะใช้ D ถูกใช้ไปแล้ว C อาจเป็นอักขระ M ดูเหมือนเป็นตัวเลือกที่สมเหตุสมผล
Aaron Franke

27

จากข้อกำหนด C #:

var f = 0f; // float
var d = 0d; // double
var m = 0m; // decimal (money)
var u = 0u; // unsigned int
var l = 0l; // long
var ul = 0ul; // unsigned long

โปรดทราบว่าคุณสามารถใช้สัญลักษณ์ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก


19

M หมายถึงอักขระที่ไม่ชัดเจนตัวแรกใน "ทศนิยม" หากคุณไม่เพิ่มหมายเลขจะถือว่าเป็นสองเท่า

D คือสองครั้ง


4
ฉันคิดว่ามีเหตุผลสำคัญบางอย่าง แต่มันทำให้ฉันรำคาญว่าคุณได้รับข้อผิดพลาดในการคอมไพล์เวลาถ้าคุณปล่อย m ออกจากตัวอักษร ไม่ใช่ว่ามันคลุมเครือ
SeaDrive

1
@JSON มันใช้งานได้กับประเภทจำนวนเต็มเพราะมันไม่มีความกำกวมอยู่ - ตราบใดที่มันเหมาะกับประเภทมันจะไม่สูญเสียข้อมูลใด ๆ เช่นเดียวกันไม่เป็นจริงของตัวเลขทศนิยม การหล่อค่าสองเท่า0.42เป็นทศนิยมสามารถให้ค่าที่แตกต่างกับคุณ0.42M(และเหมือนกันสำหรับการใช้ตัวอักษรสองตัวแทนการลอยตามตัวอักษร - float val = 423.3ยังล้มเหลว) ดังนั้นคุณเลือกระหว่างพฤติกรรมที่ผิดพลาดอย่างละเอียดและข้อผิดพลาดของคอมไพเลอร์ที่ใช้เวลาครึ่งวินาทีในการแก้ไขและสอดคล้องกับมาตรฐาน CLR และ C #
Luaan

1
"M" เช่นเดียวกับใน "deciMal"
Shadi Namrouti

2

ตัวอักษรต่อท้ายจริงโดย M หรือ m เป็นทศนิยมประเภท ตัวอย่างเช่นตัวอักษร 1m, 1.5m, 1e10m และ 123.456M เป็นทศนิยมชนิดทั้งหมด ตัวอักษรนี้ถูกแปลงเป็นค่าทศนิยมโดยการรับค่าที่แน่นอนและหากจำเป็นให้ปัดเศษเป็นค่าที่สามารถแทนได้ที่ใกล้ที่สุดโดยใช้การปัดเศษของนายธนาคาร สเกลใด ๆ ที่ปรากฏในตัวอักษรจะได้รับการเก็บรักษาไว้ยกเว้นค่าจะถูกปัดเศษหรือค่าเป็นศูนย์ (ซึ่งในกรณีหลังเครื่องหมายและสเกลจะเป็น 0) ดังนั้นตัวอักษร 2.900m จะถูกแยกวิเคราะห์เป็นทศนิยมด้วยเครื่องหมาย 0 สัมประสิทธิ์ 2900 และสเกล 3

อ่านเพิ่มเติมเกี่ยวกับตัวอักษรจริง


0

ฉันว่า M เป็นตัวแทนของ mantissa ทศนิยมสามารถใช้เพื่อประหยัดเงินได้ แต่ไม่ได้หมายความว่าทศนิยมจะใช้เพื่อเงินเท่านั้น


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