Double 到 Byte 类型转换错误

2024-02-12

当执行转换时byte to double通过数学运算我得到了预期的结果。 执行相同的数学运算来反转值的变化,只要我保持不变,就会得到正确的值double类型。 但当最后我转变时double结果返回到bytevalue 转换结果不正确 1。

这只是某些人的情况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结果逗号后没有任何值。


如果您调试代码,您将看到发生了什么:

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 ","

如果你使用decimal代替double会成功的。

See: https://stackoverflow.com/questions/2741903/c-sharp-4-double-minus-double-giving- precision-problems 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”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Double 到 Byte 类型转换错误 的相关文章

随机推荐