编程语言
首页 > 编程语言> > c# – Short.Parse与十进制失败

c# – Short.Parse与十进制失败

作者:互联网

我有一个小数值

decimal myDecimal = 19.0000M;

我正在尝试将其转换为短值.

short newVal;
short.TryParse(myDecimal.ToString(), out newVal); // False

但这失败了.如果我使用双倍,那很好.

为什么这会失败?

谢谢

解决方法:

The Problem

>问题是TryParse的这个重载将该数字视为
一个NumberStyles.Integer – 意味着它正在寻找一种格式
不包含任何..在Reference Source中看到它
实际上这样做:

public static bool TryParse(String s, out Int16 result) {
   return TryParse(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo, out result);
}

>表明了.是问题的变化如下,它会
工作:

decimal myDecimal = 19M;
var succeeded = short.TryParse(myDecimal.ToString(), out newVal);

How Does Double work but decimal fails

使用double的原因是因为它在ToString中的返回方式:

decimal val1 = 19.00M;
double val2 = 19.00;

val1.ToString() // "19.00"
val2.ToString() // "19"

The Fix

为了能够解析原始输入,请使用您提供NumberStyle和Format的重载:

var succeeded = short.TryParse(myDecimal.ToString(), NumberStyles.Number, NumberFormatInfo.CurrentInfo,  out newVal);

NumberStyle.Number允许:

> AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,
AllowTrailingSign,AllowDecimalPoint,AllowThousands

标签:c,tryparse
来源: https://codeday.me/bug/20190527/1165464.html