C# 将 "double" 转换为 "ushort"

C# convert "double" to "ushort"

我受困于变量格式。我知道这是一个愚蠢的问题,但我已经问了 2 个小时而且我已经失去理智了。

问题是:

我有:

command.Data = new ushort[] { xx, yy, zz };

我需要做的是:

ushort zz = System.Math.Tan(c1AngleX);

但是 System.Math.Tan 的输出是 "double",所以我不能在那里使用 "ushort"。

我试过了

ushort zz = (Convert.ToUInt16 (System.Math.Tan(c1AngleX));

但是没有用。 (无法将 "double" 转换为 "string")

有什么方法可以将 "double" 转换为 "ushort"?

(如果这个问题是"too trivial",我很抱歉,但我真的卡住了)

您似乎遇到的问题是,从浮点类型转换为整数类型会丢失小数。

如果您对值 0.111333423 进行转换(假设这是 Tan 的结果)zz 将具有值 0,因为任何小数点都将被删除。由于 ushort 也是无符号的,因此符号也不会被转移。

例如,有一些方法可以处理称为定点整数的整数类型中的小数。但这是假设您出于任何原因确实需要使用 ushort(或与此相关的任何整数类型)。对于此类函数,您应该避免由于数据丢失而导致的整数类型。

ushort 是一个 16 位变量,可以保存 0 到 65535 之间的整数值。 double 是一个 8 字节的变量,可以容纳 .. 很多值,包括分数。

因此,如果将 double 转换为 ushort,则可能会丢失数据。这就是为什么系统不会让你在没有明确指示的情况下这样做的原因。

最简单的转换方法是使用转换运算符:例如

double d = 99.99;
ushort u = (ushort)d;

或者您可以使用显式舍入或截断双精度的数学函数之一对其进行转换,但它们 return 加倍,因此您仍然必须进行转换。

你应该首先考虑为什么要将double 值放入ushort 类型。为正确的行为而设计远比仅仅因为你能把圆钉压成方形更重要。