【问题标题】:Convert Decimal to decimal of a particular format?将十进制转换为特定格式的十进制?
【发布时间】:2016-05-09 14:05:39
【问题描述】:

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

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)做同样的事情

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

我得到的错误:

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

【问题讨论】:

  • dict.Add("A", A.HasValue.Value); 无法编译。我想你想使用dict.Add("A", A.Value)
  • A.HasValue.Value,什么?为什么dict.Add("A", A) 不能简单地工作?正如您所写,无论如何您都没有对null 进行任何特殊处理。
  • @TimSchmelter,谢谢,有没有办法从 c# 代码格式化输入的十进制数
  • @Rahul Chowdhury 您需要重新编写此问题并提供更多信息,以便人们帮助您。现在这个问题没有意义。完全不清楚您提到的字典与整个问题有什么关系。
  • @user469104,谢谢,我会重写它。这本字典正在添加 sql 参数。在这里,我想从 c# 代码格式化一个小数,所以没有从 DB 端抛出异常,现在看来 store proc 没有以正确的格式获取输入

标签: c# .net type-conversion


【解决方案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);

【讨论】:

  • 感谢您的回答,目前我正在使用 c# 4.0 ,我现在正在使用 Math.Round() ,是的,通常无法防止数据丢失。截至目前我更改了我的代码那 dict.Add("A",Math.Round(A.Value,0));对于 decimal(6,0) 和 dict.Add("B",Math.Round(B.Value,2));对于十进制(8,2)..希望它有效
猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2015-04-18
  • 2019-08-04
相关资源
最近更新 更多