将固定长度的数字转换为十进制.net c#
本文关键字:转换 十进制 net 数字 | 更新日期: 2023-09-27 18:10:44
我有一个导入的txt文件,编号为:
00000000003000
00000000009500
00000000003000
00000000002000
00000000000500-
00000000001500-
00000000003000-
00000000003000-
00000000009500-
这是最后两个字符为小数的数。(负值为负号)例如:
00000000003000 = 30.00
00000000000500- = -5.00
是否有一个函数将此字符串转换为十进制并节省我的时间写一个?
谢谢。
试试这个:
String source = "00000000001500-";
Decimal result = Decimal.Parse(source,
NumberStyles.Any, // NumberStyles.Any includes trailing signs
CultureInfo.InvariantCulture) / 100.0M;
如果您想要(对于某些字段,值)四位小数,只需将这些字段的100.0M
更改为10000.0M
:
Decimal result4 = Decimal.Parse(source,
NumberStyles.Any, // NumberStyles.Any includes trailing signs
CultureInfo.InvariantCulture) / 10000.0M;
没有特别针对您的确切场景的内容-特别是末尾的-
非常不常见。
我会这样写:
public static decimal Parse(string val)
{
return (val.EndsWith("-") ? -1M : 1M)
* decimal.Parse
(
val.Substring(0, 12)
+ "." + val.Substring(12, 2),
CultureInfo.InvariantCulture
);
}
或者,使用NumberStyles.AllowTrailingSign
:
public static decimal Parse(string val)
{
return
decimal.Parse
(
val.Substring(0, 12)
+ "." + val.Substring(12),
NumberStyles.AllowTrailingSign | NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture
);
}
您可以将decimal.Parse
与自定义格式提供程序一起使用,并使用适当的NumberFormatInfo.NumberNegativePattern
追加减号=> formatProvider.NumberNegativePattern = 3;
:
var formatProvider = (NumberFormatInfo)NumberFormatInfo.InvariantInfo.Clone();
formatProvider.NumberNegativePattern = 3;
var numbers = File.ReadLines(yourFilePath)
.Select(l => l.TryGetDecimal(formatProvider))
.Where(n => n.HasValue)
.Select(d => d.Value / 100.0M);
在LINQ查询中使用此扩展名将字符串解析为十进制:
public static decimal? TryGetDecimal(this string item, IFormatProvider formatProvider = null, NumberStyles nStyles = NumberStyles.Any)
{
if (formatProvider == null) formatProvider = NumberFormatInfo.CurrentInfo;
decimal d = 0m;
bool success = decimal.TryParse(item, nStyles, formatProvider, out d);
if (success)
return d;
else
return null;
}
如果你想要所有小数的和,你可以使用Enumerable.Sum
:
decimal sum = numbers.Sum(); // 0