我不理解十进制除法背后的逻辑:
constructor(vararg items: Item){
val itemMap = items.fold(mutableMapOf<Int, MutableList<Item>>(), { acc, item ->
if (acc.containsKey(item.state)) {
acc[item.state]?.add(item)
} else {
acc.put(item.state, mutableListOf(item))
}
return acc
})
}
这非常有效:
from decimal import *
getcontext().prec = 2
但这已经不是了:
>>> Decimal("11") / 2
Decimal('5.5')
为什么不是“10.5”?...
答案 0 :(得分:0)
在你的情况下,这是因为精度不足而发生的。 值分别舍入为Decimal上下文的“舍入”属性。
如python docs中所述,十进制上下文精度在算术运算期间起作用。 精度确定计算的准确性。这意味着根据精度值的不同,您可能会得到不同的结果。
广泛不同的结果表明精度不足,四舍五入 模式问题,病态输入或数值不稳定 算法
因此,您唯一需要做的就是增加小数精度值。 默认情况下,它等于28。
答案 1 :(得分:0)
十进制的上下文prec
会考虑数字中的所有数字,而不仅仅是小数点后的数字。
因此,5.5
有2个数字,10
也有。如果您想查看10.5
,则必须将精度设置为3位数。