Adr*_*n4B 14 c# floating-point precision
像这样转换浮点数的任何聪明方法:
float f = 711989.98f;
Run Code Online (Sandbox Code Playgroud)
变成十进制(或双精度)而不失精度?
我试过了:
decimal d = (decimal)f;
decimal d1 = (decimal)(Math.Round(f,2));
decimal d2 = Convert.ToDecimal(f);
Run Code Online (Sandbox Code Playgroud)
小智 5
这可能是一个编译器错误,因为似乎有效的浮点数应该直接转换为小数。但它不会在不失去分辨率的情况下。将 125.609375 从浮点数转换为十进制数将失去分辨率。但是,将其从 float 转换为 double 然后将 double 转换为十进制将保持分辨率。
float float_val = 125.609375f;
decimal bad_decimal_val = (decimal)float_val; //125.6094
double double_val = (double)float_val;
decimal good_decimal_val = (decimal)double_val;
Run Code Online (Sandbox Code Playgroud)