我在尝试执行存储过程时遇到错误。
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)
数据库列接受上述格式的空值和小数。
我收到错误:
将数据类型数字转换为十进制
时出错
答案 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);