C#float到十进制转换

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)

Han*_*ant 13

现在为时已晚,第8位数字在编译器中丢失了.float类型只能存储7位有效数字.你必须重写代码,分配为double或decimal当然会解决问题.


小智 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)

  • 从 float 转换为 double 不会神奇地添加丢失的小数位。只需使用末尾不带“f”的浮点文字(这些是双精度数),或使用十进制文字,如 125.609375M。 (2认同)