双字节类型转换错误 [英] Double to Byte type conversion error

查看:149
本文介绍了双字节类型转换错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

通过数学运算从字节转换为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆