欢迎!有关如何工作的更多信息,请参阅 关于 页面。
我觉得有点不一致,我可以输入
123423534634544234534634645342363462443649886756676645466767687
它将自动提升它为 BigInt 以适配,而无需我使用 N 后缀来指定。
但如果使用十进制
12.3423534634544234534634645342363462443649886756676645466767687
它不会自动提升为 BigDecimal,除非显式地添加 M 后缀。相反,它将截断为双精度。
这是为什么?
我猜测对于整数情况,值绝对不能表示在64位或更小的整数大小,并且 Clojure 支持的唯一默认大整数类型。
对于您提到的非整数数字,这可能是一个精度过高的浮点数或精度过高的双精度浮点数,或者可能希望它是 BigDecimal 类型。我没有想出一个编译器可以明确确定程序员的意图的方法。
请注意,当以十进制表示时,一些 IEEE 754 值的精确表示在十进制小数点后的数字位数比其他值要多得多,因此仅通过计算小数点后数字的位数是无法简单区分的。