C#将“double”转换为“ushort”

时间:2015-04-17 13:44:07

标签: c# double converter 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" to" ushort"?

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

2 个答案:

答案 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(或任何整数类型)来解决这个问题。在这种函数的情况下,您应该避免由于数据丢失导致的整数类型。