双字节类型转换错误 [英] Double to Byte type conversion error
问题描述
通过数学运算从字节
转换为 double
时,我得到了预期的结果。
执行相同的数学运算来反转值的变化,只要我保持 double
类型,就会产生正确的值。
但是最后我将 double
result转换回字节
值,转换结果不正确1
When performing conversion from byte
to double
by mathematical operations I've got expected result.
Performing the same mathematical operations to reverse the changes in value, results in correct value as long as I keep double
type.
But when at the end I converts double
result back to byte
value the conversion results is incorrect by 1.
只有一些字节
值才是这种情况。
This is the case only for some byte
values.
确切的过程:
byte b = 82; Console.WriteLine(b); // initial byte value
double d = (b / 100.0) + 2.00; Console.WriteLine(d); // 82 / 100 -> 0.82 + 2.00 -> 2.82 OK
double dt = d - 2.00; Console.WriteLine(dt); // 2.82 - 2.0 -> 0.82 OK
double db = dt * 100.0; Console.WriteLine(db); // 0.82 * 100 -> 82 (double) OK
byte dbb = (byte)db; Console.WriteLine(dbb); // (byte)82 -> 81 ERROR ERROR ERROR
b = Byte.Parse(db.ToString()); Console.WriteLine(b); // 82 -> "82" and to byte OK
为什么会发生?
double
结果在逗号后没有任何值。
Why it is happening?
The double
result does not have any values after comma.
推荐答案
如果您调试代码,您将看到发生了什么:
if you debug your code you will see what is going on:
double d = (b / 100.0) + 2.00; Console.WriteLine(d)// => d = 2.82
double dt = d - 2.00; Console.WriteLine(dt) // => dt = 0.81999999999999984
double db = dt * 100.0; Console.WriteLine(db) // => db = 81.999999999999986
byte dbb = (byte)db; Console.WriteLine(dbb) //=> dbb = 81, because Byte is cut off after the ","
之后切换字节如果您使用十进制而不是双重,它将会奏效。
If you use decimal instead of double it will work out.
请参阅: https://stackoverflow.com/questions/2741903/c-sharp-4-double-minus-double -giving-precision-problems
使其完成:
decimal d = (b / 100.0m) + 2.00m; Console.WriteLine(d);
decimal dt = d - 2.00m; Console.WriteLine(dt);
decimal db = dt * (decimal)100.0; Console.WriteLine(db);
byte dbb = (byte)db; Console.WriteLine(dbb);
您可以转换(十进制)或使用值后面的m。
You can either cast (decimal) or use the "m" behind the value.
这篇关于双字节类型转换错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!