为什么在下面的代码中,“ decimal.TryParse()”对于输入字符串“ -1”总是返回0?

时间:2019-05-10 09:55:08

标签: c# type-conversion

以下代码应返回-1十进制值,但返回0。我在做错什么吗?

decimal validity = -1;
validityStr = "-1";

decimal.TryParse(validityStr, NumberStyles.AllowDecimalPoint,
                   CultureInfo.InvariantCulture, out validity);

预期输出:

  

-1

实际输出:

  

0

2 个答案:

答案 0 :(得分:30)

您忘了告诉TryParse开头的符号没问题

decimal validity = -1;
var validityStr = "-1";

decimal.TryParse(validityStr, 
    NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
    CultureInfo.InvariantCulture, 
    out validity);

答案 1 :(得分:6)

根据documentation

  

此方法返回时,如果转换成功,则包含与s中包含的数值等效的十进制数;如果转换失败,则包含零。。如果s参数为null或Empty,不是有效格式的数字,或者表示小于MinValue或大于MaxValue的数字,则转换失败。此参数通过uininitialized传递;结果中最初提供的任何值都将被覆盖。

由于转换失败,有效性变为0。为确保转换有效,您应添加NumberStyles。AllowLeadingSign