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

Jón*_*rás 1 c# double ushort converters

我被变量格式困住了。我知道这是一个愚蠢的问题,但我已经思考了两个小时,我已经失去了理智。

问题是:

我有:

command.Data = new ushort[] { xx, yy, zz };
Run Code Online (Sandbox Code Playgroud)

我需要做的是:

ushort zz = System.Math.Tan(c1AngleX);
Run Code Online (Sandbox Code Playgroud)

但是 System.Math.Tan 的输出是“double”,所以我有点不能在那里有“ushort”。

我试过这个

ushort zz = (Convert.ToUInt16 (System.Math.Tan(c1AngleX));
Run Code Online (Sandbox Code Playgroud)

但这不起作用。(无法将“双精度”转换为“字符串”)

有什么方法可以将“double”转换为“ushort”吗?

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

gbj*_*anb 5

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

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

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

double d = 99.99;
ushort u = (ushort)d;
Run Code Online (Sandbox Code Playgroud)

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

您应该首先考虑为什么要将 double 值放入 ushort 类型中。为正确的行为而设计比仅仅因为你可以而将圆钉压成方形要重要得多。

  • 我推荐 Convert.ToUInt16 而不是强制转换。我遇到过一个情况,`(ushort)(0.57*100)` 给出了错误的结果 **56**。使用 `Convert.ToUInt16(0.57*100)` 正确返回 **57**。 (3认同)