从double到byte的转换会产生意外结果

时间:2014-04-09 08:00:51

标签: c# double byte

让我们考虑一个场景:我们的程序中有一个双变量,表示字节值的百分比。经过一些操作后,我们将简单的范围转换out = 2.55*original转换为提到的双字节。但是100%会发生什么?

double a = 100.0;
Console.WriteLine("original: {0}", a);
Console.WriteLine("original*2.55: {0}", (2.55*a));
byte b = (byte)(2.55*a);
Console.WriteLine("byte: {0}", b);
Console.WriteLine("wat -.-: {0}", (byte)(100.1 * 2.55));

>original: 100
>original*2.55: 255
>byte: 254  <------------------!!!
>wat -.-: 255

同时:

Console.WriteLine("{0}", (byte)(255.0));
Console.WriteLine("{0}", (byte)(255));

>255
>255

发生了什么事?作为乘法结果的double中的整数表示不应该与未乘以的整数表示相同吗?我错过了什么?

3 个答案:

答案 0 :(得分:4)

表达式

2.55 * 100.0

评估为

254.99999999999997

表示转换为byte时截断会产生254

答案 1 :(得分:4)

您应该可以使用

将double转换为一个字节
a = Convert.ToByte(b);

答案 2 :(得分:1)

这是因为2.55 * 100无法表示为float。相反,它会评估为254.999999999,当被截断时,会产生254