是否有任何帮助方法将字符串转换为十进制设置动态格式?
这样的事情:
var myNumber = decimal.Parse(myString, precision, scale);
例如:
myString: "0109123456"
precision: 9
scale: 6
output: 109.123456
原始问题
我正在从具有固定长度的文件中读取值:
示例行:
004574575434768743486765025448754546746485678696854745646874
为此我正在使用FileHelpers,但每个值都有不同的精度/比例:
Amount1 (pos0-pos16) - precision: 15, scale: 2
Amount1 (pos17-pos25) - precision: 7, scale: 3
FileHelpers获取我确定的范围内的值,但之后我需要转换它。
答案 0 :(得分:3)
快速举例:
public static class stringExtension
{
public static decimal ToDecimal(this string s, int precision, int scale)
{
if (s.Length < precision)
throw new ArgumentException();
return decimal
.Parse(
s.Substring(s.Length - precision)
.Insert(precision - scale, ".")
.ToString()
,
System.Globalization.NumberStyles.AllowDecimalPoint,
System.Globalization.NumberFormatInfo.InvariantInfo
);
}
}
使用:
string s = "0109123456";
decimal d = s.ToDecimal(9, 6); // returns 109.123456M
答案 1 :(得分:1)
您可以将System.Data.SqlTypes.SqlDecimal
用于此
System.Data.SqlTypes.SqlDecimal.ConvertToPrecScale(SqlDecimal.Parse(yourString), 9, 6); // params: SqlDecimal n, int precision, int scale
这里是MSDN-link。
要获得decimal
,您可以使用SqlDecimal.Value
。
如果您使用ConvertToPrecScale
它会抛出SqlTruncateException
将值设置为a时引发的异常 System.Data.SqlTypes中