将十进制转换为特定格式的十进制?

时间:2016-05-09 14:05:39

标签: c# .net type-conversion

我在尝试执行存储过程时遇到错误。

C#属性 - 我无法改变:

private decimal? a;
public decimal? A
{
    get { return a; }
    set { a = value; }
}

我可以改变的C#DAC层:

if (A.HasValue)
    dict.Add("A", A.Value);
else
    dict.Add("A", null);

在存储过程输入中 - >我无法改变

@A decimal(6,0)

在没有异常和数据丢失的情况下转换它的最佳方法是什么?我需要对@B decimal(8,2)

执行相同的操作

数据库列接受上述格式的空值和小数。

我收到错误:

  

将数据类型数字转换为十进制

时出错

1 个答案:

答案 0 :(得分:1)

从未提及您正在使用的语言版本,因此我将假设C#6。您可以删除if / else语句并使用单个语句dict.Add("A", A?.Value)。这是一个空条件运算符:https://msdn.microsoft.com/en-us/library/dn986595.aspx

至于如何转换而不是丢失数据......这通常是不可能的。如果你有一个3位精度的数字,并且你想要2位数的精度,那么有一个与之相关的舍入,这意味着数字总是偏离一点点。如果要将数字从例如3位小数位转换为2位小数位,只需使用正确的格式说明符将值放入string.Format()。如果你想要一个没有精度的数字(整数),只需取小数并将其存储在整数类型int myWholeNumber = myDecimal;或转换(可能更安全)int myWholeNumber = decimal.ConvertToInt32(myDecimal);

要将字符串转换为小数,只需使用parse方法。 decimal myDecimal = decimal.Parse(myStringDecimalValue);