任何以这种方式转换浮点数的聪明方法:
float f = 711989.98f;
成十进制(或双精度)而不会丢失精度?
我试过了:
decimal d = (decimal)f;
decimal d1 = (decimal)(Math.Round(f,2));
decimal d2 = Convert.ToDecimal(f);
答案 0 :(得分:12)
为时已晚,第8位数字在编译器中丢失了。 float类型只能存储7位有效数字。你必须重写代码,分配给double或decimal当然会解决问题。
答案 1 :(得分:3)
这可能是一个编译器错误,因为它似乎是一个有效的float应该直接转换为十进制。但它不会失去决心。 将125.609375从float转换为十进制将失去分辨率。 但是,将它从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;
答案 2 :(得分:1)
decimal.TryParse()
http://forums.asp.net/t/1161880.aspx
float / double和decimal之间没有隐式转换。隐式数字转换始终保证不会丢失精度或幅度,并且不会导致异常。
答案 3 :(得分:1)
你写完711989.98f的那一刻就失去了精确度。
711989.98是十进制的。最后使用f,您要求编译器将其转换为float。在不失去精度的情况下无法完成此转换。
你可能想要的是小数d = 711989.98m。这不会失去精确度。