通过数学运算从字节转换为 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.
请参阅: stackoverflow/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.
更多推荐
双字节类型转换错误
发布评论