2016-05-09 110 views
0

当我尝试执行存储过程时出现错误。将十进制转换为特定格式的十进制数?

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

'dict.Add(“A”,A.HasValue.Value);'不编译。我想你想用'dict.Add(“A”,A.Value)' –

+0

'A.HasValue.Value',什么?为什么'dict.Add(“A”,A)'不是简单的工作?正如你所写的,你无论如何都不会对'null'做任何特殊的处理。 –

+0

@TimSchmelter,谢谢,有没有什么办法来格式化从C#代码输入小数 –

回答

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);

将字符串转换为十进制,只需用解析方法。 decimal myDecimal = decimal.Parse(myStringDecimalValue);

+0

感谢您的回答,目前我使用C#4.0,我使用Math.Round()截至目前,是的,通常是不可能的,以防止数据丢失。截至目前,我改变了我的代码,就像那个dict.Add(“A ”,Math.Round(a.value中,0));对于十进制(6,0)和dict.Add(“B”,Math.Round(B.Value,2));为小数(8,2)..希望它有效 –

相关问题