繁体   English   中英

C# 浮点到十进制转换

[英]C# float to decimal conversion

像这样转换浮点数的任何智能方法:

float f = 711989.98f;

成小数(或双精度)而不丢失精度?

我试过了:

decimal d = (decimal)f;
decimal d1 = (decimal)(Math.Round(f,2));
decimal d2 = Convert.ToDecimal(f);

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

这可能是一个编译器错误,因为看起来有效的浮点数应该直接转换为小数。 但它不会失去决心。 将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;

你有没有尝试过?

decimal.TryParse()

http://forums.asp.net/t/1161880.aspx

float / double和decimal之间没有隐式转换。 隐式数字转换始终保证不会丢失精度或幅度,并且不会导致异常。

你写完711989.98f的那一刻就失去了精确度。

711989.98是十进制的。 最后使用f,您要求编译器将其转换为float。 在不失去精度的情况下无法完成此转换。

你可能想要的是十进制d = 711989.98m。 这不会失去精确度。

尝试这个

        float y = 20;

        decimal x = Convert.ToDecimal(y/100);

        print("test: " + x);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM