1

我坚持使用变量格式。我知道这是一个愚蠢的问题,但我花了 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”?

(如果这个问题“太琐碎”,我很抱歉,但我真的卡住了)

4

2 回答 2

5

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

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

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

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

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

您应该首先考虑为什么要将双精度值放入 ushort 类型。为正确的行为而设计远比仅仅因为你可以就将圆形钉子挤压成方形钉子更重要。

于 2015-04-17T13:51:44.797 回答
0

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

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

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

于 2015-04-17T13:50:11.250 回答