繁体   English   中英

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

[英]C# convert “double” to “ushort”

我坚持使用变量格式。 我知道这是一个愚蠢的问题,但是我已经处理了两个小时,但我却迷失了方向。

问题是:

我有:

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”?

(如果这个问题太“琐碎”了,我感到抱歉,但我真的被困住了)

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

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

最简单的投射方式是使用投射运算符:例如

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

或者,您也可以使用其中一个数学函数来显式舍入或截断double值,但是将其返回double值,因此您仍然必须进行强制转换。

您应该考虑为什么要先将double值放入ushort类型。 设计正确的行为比将圆形钉子挤入方形搁架要重要得多,因为您可以这样做。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM