Chữ M đại diện cho ký hiệu chữ thập phân C # là gì?


312

Để làm việc với các kiểu dữ liệu thập phân, tôi phải thực hiện việc này với khởi tạo biến:

decimal aValue = 50.0M;

Phần M có nghĩa là gì?

Câu trả lời:


387

Nó có nghĩa là nó là một chữ thập phân, như những người khác đã nói. Tuy nhiên, nguồn gốc có lẽ không phải là những người được đề xuất ở nơi khác trong câu trả lời này. Từ Tiêu chuẩn chú thích C # (phiên bản ECMA, không phải phiên bản MS):

Các decimalhậu tố là M / m từ D / d được đã được thực hiện double. Mặc dù có ý kiến ​​cho rằng M là viết tắt của tiền, Peter Golde nhớ lại rằng M được chọn đơn giản là bức thư hay nhất tiếp theo decimal.

Một chú thích tương tự đề cập rằng các phiên bản đầu tiên của C # bao gồm "Y" và "S" cho byteshortchữ tương ứng. Chúng đã bị loại bỏ với lý do không thường xuyên hữu ích.


6
Điều đó đặt ra câu hỏi tại sao E / e không phải là chữ cái tốt nhất tiếp theo.
VVS

61
"E" sẽ có vấn đề ở chỗ nó đã được sử dụng bằng chữ. Ví dụ: "2e4m" là một chữ hợp lệ (thập phân 20000). Ngay cả khi nó không rõ ràng (và có thể là như vậy, mặc dù "1e" kết thúc bằng một thông báo lỗi trình biên dịch gây tò mò cho thấy nó nằm ngoài phạm vi của các nhân đôi khả thi, không phải là nó không hợp lệ về mặt cú pháp; tôi nghi ngờ đó là một lỗi) gây nhầm lẫn. "c" có thể có ý nghĩa mà không gây ra bất kỳ sự nhầm lẫn nào, mặc dù không nghi ngờ gì sẽ gợi ý "tiền tệ" cho mọi người :)
Jon Skeet

7
"c" xung đột với ký tự cho các chuỗi trong VB.Net, mặc dù ngay cả ở đó ngữ pháp cũng có một chút khác biệt.
Joel Coehoorn

3
Tôi sẽ không gặp quá nhiều vấn đề với việc nó khác với C # và VB. VB đã có cú pháp hex khác nhau, ví dụ, IIRC.
Jon Skeet

9
Nếu bạn đặt ra các âm tiết của "Thập phân", bạn sẽ nhận được "De Ci Mal". Chúng làm cho ý nghĩa nhất để sử dụng. D đã được sử dụng, C có thể là các ký tự, M có vẻ như là một lựa chọn hợp lý.
Aaron Franke

27

Từ thông số kỹ thuật của 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

Lưu ý rằng bạn có thể sử dụng ký hiệu viết hoa hoặc viết thường.


19

M đề cập đến ký tự không mơ hồ đầu tiên trong "thập phân". Nếu bạn không thêm nó, số sẽ được coi là gấp đôi.

D là gấp đôi.


4
Tôi cho rằng có một số lý do quan trọng, nhưng nó làm tôi bực mình rằng bạn gặp lỗi thời gian biên dịch nếu bạn bỏ chữ m ra khỏi nghĩa đen. Nó không như thể nó mơ hồ.
SeaDrive

1
@JSON Nó hoạt động theo cách đó cho các loại số nguyên, bởi vì không có sự mơ hồ ở đó - miễn là nó phù hợp với loại đó, nó sẽ không mất / cắt xén bất kỳ thông tin nào. Điều tương tự không đúng với số thập phân. Truyền giá trị kép 0.42thành số thập phân có thể cung cấp cho bạn một giá trị khác so với 0.42M(và tương tự đối với việc sử dụng một chữ kép thay cho chữ nổi - float val = 423.3cũng không thành công). Vì vậy, bạn đang chọn giữa một hành vi sai tinh tế và lỗi trình biên dịch mất nửa giây để khắc phục và tuân thủ các tiêu chuẩn CLR và C #.
Luaan

1
"M", như trong "deciMal"
Shadi Namrouti

2

Một nghĩa đen thực sự được thêm vào bởi M hoặc m là kiểu thập phân. Ví dụ, các chữ nghĩa 1m, 1,5m, 1e10m và 123.456M đều thuộc loại thập phân. Chữ này được chuyển đổi thành giá trị thập phân bằng cách lấy giá trị chính xác và, nếu cần, làm tròn đến giá trị đại diện gần nhất bằng cách sử dụng làm tròn của ngân hàng. Bất kỳ tỷ lệ rõ ràng nào trong chữ đều được bảo tồn trừ khi giá trị được làm tròn hoặc giá trị bằng 0 (trong trường hợp sau, dấu và tỷ lệ sẽ là 0). Do đó, chữ 2.900m sẽ được phân tích cú pháp để tạo thành số thập phân có ký hiệu 0, hệ số 2900 và tỷ lệ 3.

Tìm hiểu thêm về văn học thực sự


0

Chà, tôi đoán M đại diện cho lớp phủ. Số thập phân có thể được sử dụng để tiết kiệm tiền, nhưng điều đó không có nghĩa, số thập phân chỉ được sử dụng cho tiền.


Đó thực sự là một phỏng đoán, và nó ít hợp lý hơn nhiều so với giả thuyết "nhân vật không mơ hồ có sẵn đầu tiên". Nếu bạn có bằng chứng hỗ trợ, hãy đưa nó vào câu trả lời của bạn.
isherwood
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.