1

我知道int()int64()Go提供类型转换功能。有安全的投掷方法吗浮点64整数64(带截断,)给定最大的可代表64位浮点数数学。最大浮动64远大于数学。最大Int64? 一种方式,触发溢出错误?

4
  • 您可以在转换之前检查浮点64值小于最小Int64或大于最大Int64。如果是这样,转换肯定会溢出。
    – 伊察
    评论 2023年1月28日13:51
  • @JimB可以与浮点64最接近的值最大Int64. 评论 2023年1月28日14:34
  • @伊察:是的,没错,我只是说它可能会令人惊讶,因为它在外面+/-1<<53 评论 2023年1月28日14:42
  • 非常感谢你!这段对话提供了很多见解,吉姆的回答信息丰富。 评论 2023年1月28日15:26

1答案1

重置为默认值
2

如果你是转换(非铸造或类型铸造)浮点64整数64,然后可以将浮点值与最接近的双精度整数值进行比较数学。最大Int64数学。最小Int64。这些数字不能精确存储在浮点64值,但它们将存储为高于或低于这些值的下一个整数值:

float64(数学MaxInt64)//9223372036854775808float64(数学MinInt64)//-9223372036854775808

所以只要你浮点64值介于这两个值之间,您知道它可以转换为整数64没有溢出。

但是请注意,如果您在另一个方向转换,则不能保证浮点64可以准确地表示全部的 整数64值最大为最大输入64,因为双精度浮点值只保留52位精度。在这种情况下,您必须检查整数64值介于-1<<531<<53.

无论哪种情况,都可以使用数学/大包裹。

0

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.