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