我正在尝试将具有该值的对象转换0.39999999999999997为十进制变量而不会丢失精度.
object d = 0.39999999999999997;
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法.
decimal val1 = Convert.ToDecimal(d); // val1 = 0.4
object val2 = Convert.ChangeType(d, Type.GetType("System.Decimal")); // val2 = 0.4
decimal val3 = decimal.Parse(d.ToString()); // val3 = 0.4
decimal val4 = (Decimal) d; // val4 = 0.4
Run Code Online (Sandbox Code Playgroud)
我知道这不是十进制数据类型无法存储此值的问题,如下所示.
decimal val5 = 0.39999999999999997m; // val5 = 0.39999999999999997;
Run Code Online (Sandbox Code Playgroud)
如何在不丢失精度的情况下将此对象转换为十进制?
如果重要的话,我正在使用.NET Framework 3.5.
在将字符串解析为双倍时,我们面临着一个问题.我们需要将18位数字符串(<123,456,789,012>.<123456>)转换为double.它只返回小数点后的5位数.当我们试图减少数字的数字时,它工作得很好.我们附上了三个不同场景的屏幕截图.变量'S'是输入,retValue是输出值.
请帮助我们将123,456,789,012.123456转换为123456789012.123456
string s = "123,456,789,012.123456";
double retVal;
System.Globalization.CultureInfo cInfo = new System.Globalization.CultureInfo(System.Web.HttpContext.Curr??ent.Session["culture??"].ToString());
retVal = double.Parse(s, NumberStyles.Any, cInfo);
Run Code Online (Sandbox Code Playgroud)