gpt4 book ai didi

c# - Double 到 Byte 类型转换错误

转载 作者:行者123 更新时间:2023-11-30 23:18:42 25 4
gpt4 key购买 nike

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

这仅适用于某些 byte 值。

具体过程:

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 它会成功。

参见: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”。

关于c# - Double 到 Byte 类型转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40673698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com