我在C#中遇到了这些数据类型的大小和最大值的混乱模式。
在使用Marshal.SizeOf()比较这些大小时,我发现了以下结果 -
Float- 4 bytes,
Double - 8 bytes,
Decimal - 16 bytes
当比较他们的MaxValues时,我得到了这样的结果,
Float- 340282346638528986604286022844204804240,
Double - 179769313486231680088648464220646842686668242844028646442228680066046004606080400844208228060084840044686866242482868202680268820402884062800406622428864666882406066422426822086680426404402040202424880224808280820888844286620802664406086660842040886824002682662666864246642840408646468824200860804260804068888,
Decimal - 79228162514264337593543950335
我感到困惑的原因是,Decimal比Float和Double占用更多的非托管内存,但是不能包含比浮动更大的值。 任何人都可以解释编译器的这种行为。 感谢。