将 int 转换为 double 并返回是否安全

vbr*_*uss 5 c# casting

将 Integer 转换为 Double 并再次返回是否安全?

更具体一点,在以下情况下,所有originalValue等于的整数都成立吗:retrievedValue

int originalValue = 42;
double backingField = (double)originalValue;
int retrievedValue = (int)backingField;
Run Code Online (Sandbox Code Playgroud)

一些背景/动机:我正在用 C# 编写大量带有大量接口的微服务。对于以秒为单位的时间间隔,一些客户端将它们作为整数发送,另一些则作为浮点值发送。我需要存储它们并返回与客户发送给我的相同的值。如果可以安全地假设,我的问题目标是,当我检索一个整数,但将所有值存储为双精度值时,在检索客户端上转换为整数将始终返回原始值。特别是通过截断逗号后的任何值来完成转换。

任何强制转换为 double 的结果是否会导致小于整数的值,例如 42 -> 41.9999999999999?

and*_*ian -5

存在从 int 到 long、float、double 或decimal 的预定义隐式转换。正如所说,

任何整型类型都可以隐式转换为任何浮点类型。

检查ms 文档上的隐式数字转换表(C# 参考) 。

那么对于逆运算

从 int 到 float 的转换中可能会丢失精度,但不会丢失大小。

浮动到双精度也是隐式强制转换。

您可以使用类似于测试框架的技术,断言具有容差的数字类型相等。

致我的批评者(编辑)

链接到您的微服务问题,引用 Sam Newman 的观点

接受的内容要自由,发送的内容要保守。

如果您的客户端需要整数,请将数据存储为双精度或十进制,并使用某种机制来防止在转换为int、 likeMath.FloorMath.Ceiling使用适当的舍入选项时丢失精度。否则,如果另一个客户端需要某种格式,其中存在隐式转换且不损失精度,那么您就很容易了。