【发布时间】:2019-07-03 08:17:42
【问题描述】:
我正在尝试编写一个转换函数,它接受一个float 并返回一个int,它基本上是进行饱和转换。如果它大于int.MaxValue,则应返回int.MaxValue,同样适用于int.MinValue。
我宁愿不捕获异常作为我正常流程控制的一部分,而是明确检查边界,除非我不确定上限是多少,因为可以存储在 int 中的最大浮点数小于 @ 987654328@ 作为浮点数的精度低于整数值。
基本上我在寻找...:
float largestFloatThatCanBeStoredInAnInt = ...
【问题讨论】:
-
您可以在
float中存储小于int.MaxValue的最高值是2147483000f。在它翻倒之前你可以使用的最大 constantfloat字面量是2147483456f,即使添加一个分数也会让它翻倒。我通过实验找到了这些,所以我无法回答获得这些值的好方法。 -
@LasseVågsætherKarlsen 我不确定
2147483000f是小于int.MaxValue的最大浮点数。2147483520f呢?见here -
我同意,这甚至更大,在它翻倒之前我得到了高达
2147483583f,我想我以前的代码中有一个错误来测试这个。这最终成为字节 ff-ff-ff-4e,将值增加 1 到00-00-00-4f,这被认为更高。而3583与3520只是在字面上,无论看起来如何,它都存储为3520。 -
相关:Can a conversion from double to int be written in portable C。我的答案包括一个 C 例程,它计算最大的
double小于给定的intx加 1,因此最大的两倍小于或等于x。但它依赖于C提供的信息,例如DBL_MANT_DIG。
标签: c# .net floating-point int rounding