当前位置:  开发笔记 > 编程语言 > 正文

为什么不能直接将带小数点的数字分配给十进制类型而不使用类型后缀?

如何解决《为什么不能直接将带小数点的数字分配给十进制类型而不使用类型后缀?》经验,为你挑选了3个好方法。

为什么不在不使用类型后缀的情况下直接将带小数点的数字分配给小数类型?是不是这种数字被认为是一些十进制类型?

decimal bankBalance = 3433.20; // ERROR!

Brian Rasmus.. 79

编辑:我可能错过了问题的最后部分,因此下面的概述几乎没有用.

无论如何,你不能做你想要做的事情的原因是因为浮点类型之间没有隐式转换decimal.但是,您可以从整数中分配它,因为存在从int到decimal的隐式转换.


您可以,但必须使用此语法(或对十进制执行显式转换).

decimal bankBalance = 3433.20m;

对于浮子来说

float bankBalance = 3433.20f;

默认是双倍

double bankBalance = 3444.20;


Marc Gravell.. 17

实际上,隐藏的规格功能:你可以;-p

decimal bankBalance = (decimal)3433.20;

这是由编译器真正解析为十进制(不是浮点数和强制转换).请参阅IL来证明这一点.请注意,精度会被截断(这有1个十进制数字,而不是从M版本中得到的2 ).

IL生成:

L_0001: ldc.i4 0x861c
L_0006: ldc.i4.0 
L_0007: ldc.i4.0 
L_0008: ldc.i4.0 
L_0009: ldc.i4.1 
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0 

相比:

decimal bankBalance = 3433.20M;

哪个产生:

L_0001: ldc.i4 0x53d18
L_0006: ldc.i4.0 
L_0007: ldc.i4.0 
L_0008: ldc.i4.0 
L_0009: ldc.i4.2 
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0 

唯一的区别是十进制数字(1对2,因此为10)



1> Brian Rasmus..:

编辑:我可能错过了问题的最后部分,因此下面的概述几乎没有用.

无论如何,你不能做你想要做的事情的原因是因为浮点类型之间没有隐式转换decimal.但是,您可以从整数中分配它,因为存在从int到decimal的隐式转换.


您可以,但必须使用此语法(或对十进制执行显式转换).

decimal bankBalance = 3433.20m;

对于浮子来说

float bankBalance = 3433.20f;

默认是双倍

double bankBalance = 3444.20;



2> Marc Gravell..:

实际上,隐藏的规格功能:你可以;-p

decimal bankBalance = (decimal)3433.20;

这是由编译器真正解析为十进制(不是浮点数和强制转换).请参阅IL来证明这一点.请注意,精度会被截断(这有1个十进制数字,而不是从M版本中得到的2 ).

IL生成:

L_0001: ldc.i4 0x861c
L_0006: ldc.i4.0 
L_0007: ldc.i4.0 
L_0008: ldc.i4.0 
L_0009: ldc.i4.1 
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0 

相比:

decimal bankBalance = 3433.20M;

哪个产生:

L_0001: ldc.i4 0x53d18
L_0006: ldc.i4.0 
L_0007: ldc.i4.0 
L_0008: ldc.i4.0 
L_0009: ldc.i4.2 
L_000a: newobj instance void [mscorlib]System.Decimal::.ctor(int32, int32, int32, bool, uint8)
L_000f: stloc.0 

唯一的区别是十进制数字(1对2,因此为10)



3> Matt Briggs..:

这个

decimal bankBalance = 3433.20M;

将工作.原因是浮点数和小数是非常不同的类型.float会给你一个非常接近你输入数字的近似值,但decimal会给你一个确切的数字.99%的时间你不会注意到差异,应该只使用浮动.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有