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