欢迎!有关如何使用本页面的更多信息,请参阅关于页面。
我发现这一点有点不一致,我可以输入
123423534634544234534634645342363462443649886756676645466767687
并且它会自动提升到BigInt以匹配,而不需要我用N后缀来指定。
但是,如果使用十进制
12.3423534634544234534634645342363462443649886756676645466767687
它不会自动提升为BigDecimal,除非显式地加上M后缀。相反,它将被截断为双精度。
有什么原因吗?
我的猜测是,对于整数情况,可以100%确定该值不能表示为64位或更小的整数大小,并且Clojure只支持一种大整数类型作为默认。
您提到的非整数值,可能是精度过高的浮点数,也可能是精度过高的双精度浮点数,或者可能是需要转换为BigDecimal类型的。我无法想到一种明确的方法,让编译器判断程序员想使用哪一个。
请注意,用十进制书写时,IEEE 754值的精确表示在某些情况下小数点后的位数要多得多,所以不能简单地通过计数小数点后的位数来区分。