C# 将对象转换为十进制

标签 c# .net types precision

我正在尝试将值为 0.39999999999999997 的对象转换为十进制变量而不丢失精度。

object d = 0.39999999999999997;

我尝试了以下方法。

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

我知道这不是十进制数据类型无法存储此值的问题,如下所示。

decimal val5 = 0.39999999999999997m; // val5 = 0.39999999999999997;

如何在不丢失精度的情况下将此对象转换为十进制?

如果重要的话,我正在使用 .NET Framework 3.5。

最佳答案

我认为这是您要查找的代码:

object d = 0.39999999999999997;
//Unbox value
double doubleVal = (double)d;

//Convert to string. R format specifier gives a string that can round-trip to an identical number.  
//Without R ToString() result would be doubleAsString = "0.4"
string doubleAsString = doubleVal.ToString("R"); 

//Now that you have doubleAsString = "0.39999999999999997" parse it!
decimal decimalVal = decimal.Parse(doubleAsString);

关于C# 将对象转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840681/

相关文章:

C# 在语言环境中将字符串转换为 double

c++ - 如何在 C 或 C++ 中构建大小为 n 的全新数据类型而不使用任何用户定义的数据类型?

c++ - 为什么在 C++ 中存在从指针到 bool 的隐式类型转换?

c# - 类似于 WinForms 控件中的 alt 标签

c# - 应用程序不会在其他计算机上运行/打开

math - 自由定理和参数化

c# - 如何滚动到选择框中选定的项目

c# - dll 中的 WPF 自定义控件

c# - 格式化要显示的 ajax.actionlink 文本

c# - c#中如何为方法添加参数注释