我坚持使用变量格式。我知道这是一个愚蠢的问题但我已经花了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" to" ushort"?
(我很抱歉,如果这个问题是"太琐碎",但我真的卡住了)
答案 0 :(得分:4)
ushort是一个16位变量,可以保存0到65535之间的整个值。 double是一个8字节的变量,可以容纳很多值,包括分数。
因此,如果您将double转换为ushort,您可能会丢失数据。这就是为什么没有明确的指示,系统不允许你这样做的原因。
最简单的投射方法是使用强制转换操作符:例如
double d = 99.99;
ushort u = (ushort)d;
或者您可以使用明确舍入或截断double的数学函数之一来强制转换它,但它们会返回双精度数,因此您仍然需要进行强制转换。
您应该首先考虑为什么要将double值放入ushort类型中。设计正确的行为远比将圆形挂钉压成方形夹具更重要,因为你可以。
答案 1 :(得分:0)
您似乎遇到的问题是从浮点类型转换为整数类型会丢失小数。
如果您使用值0.111333423
进行转换(假设这是Tan的结果)zz
将具有值0
,因为任何小数都将被删除。由于ushort
也是无符号的,因此符号也不会转移。
例如,有一些方法可以处理称为定点整数的整数类型中的小数。但这是假设您确实需要使用ushort(或任何整数类型)来解决这个问题。在这种函数的情况下,您应该避免由于数据丢失导致的整数类型。