我知道decimal
是一种数字格式,一般适用于金融和货币,因为它具有固定的精度。
因此,当对两个小数
进行相加或相加时,绝不会丢失精度。
然后M=a*a=0.0001
,截断为0.00
,因此精度下降。
尽管丢失了精度,但编译器认为此操作是合法的。
所以我们在C#中有以下情况:
考虑到所有这些,我的问题是:
C#编译器禁止'Decimal
'*'Double
'有什么原因吗?
十进制乘法(*
)运算符只接受decimal
类型的操作数。但是,存在从int
到decimal
的隐式转换,因此编译器将int
转换为decimal
。
从技术上讲,没有从decimal
到double
的隐式强制转换(反之亦然,因此编译器无法为您强制转换;您需要显式强制转换其中一个操作数。
从逻辑上讲,您需要对最后一个进行强制转换,因为编译器需要知道结果的类型。对于前三个类型是明确的-它们都导致decimal
,因为从int
到decimal
的隐式转换。
但是decimal
*double
的结果应该是什么?它可以是decimal
或double
,这取决于您的需要。如果您将它赋值给变量,那么编译器可以推断,但如果它是内联的呢?M*a+1
的类型是什么?
因此,您需要强制转换来告诉编译器结果类型是什么。
在处理利率、增值税率或一般利率时,我认为使用double来存储这些值更符合逻辑
double
应用于不精确的科学测量(温度、距离)和其他速度比十进制表示的准确性更重要的计算。
使用databricks spark-avro在spark中创建数据帧后,当我试图使用sum函数求和TOT_AMT列时,它会抛出“function sum requires numeric types not binarytype”错误。 该列在avro模式中定义如下, name=“tot_amt”,“type”:[“null”,{“type”:“bytes”,“logicaltype”:“dec
我遇到了奇怪的问题时,铸造小数到双倍。 以下代码返回true: 但是,当我将其强制转换为双倍时,它返回false: 这是记录在案的行为吗?当我被迫将decimal转换为Double时,我如何避免它? Visual Studio的截图: 将Math.round铸造为双倍me,结果如下: null 不幸的是,我不能在较小的项目中重现这个问题。我想埃里克的回答解释了原因。
试图创建一个十进制(或NSDecimalNumber)从给定的双倍性价比计算在我的应用程序。我在Xcode10中使用Swift4。 但它会生成以下错误的值。 我如何用SWIFT从给定的双倍值中生成一个小数?
当<code>BigDecimal</code>与<code>double</code>和<code>bigDecical</code>与<code>String</code>输入一起使用时,似乎会出现不同的结果。 x 输出为 而y是 我说这是因为双重不精确是错的吗?但既然这是一个,它不应该是一样的吗?
Decimal # decimal_create.py import decimal fmt = '{0:<25} {1:<25}' print(fmt.format('Input', 'Output')) print(fmt.format('-' * 25, '-' * 25)) # Integer print(fmt.format(5, decimal.Decimal(5))) # S
问题内容: 有人可以解释一下我在Teradata中得到的以下结果: 结果是: 我期待DECIMAL(18,4) 问题答案: 每个DBMS在涉及小数的计算方面都有其自己的规则。 Teradata的基本规则是:当您将DECIMALs相加/相减/相除时,所得的分数精度是两个操作数中较大的一个,例如dec(10,2)+ dec(10,4)= dec(xx,4) 但是,当您乘以小数位时,例如,decdec(