将包含小数的文本转换为int的LINQ方法?[英] A LINQ way of converting text containing decimals to int?

问题描述

参考 Int32.TryParse 方法:http://msdn.microsoft.com/en-us/library/zf50za27.aspx
如果必须,特别是这个例子:

numericString = "10345.72"
样式 = NumberStyles.Integer 或 NumberStyles.AllowDecimalPoint
CallTryParse(numericString, 样式)

哪个未能转换字符串"10345.72"?到int 10345,
因为"."后面有多余的数字

我的问题是:是否有一个整洁的"LINQ"?type 的解析方式
一个字符串,以便第一次出现"."(句号)找到,字符串是
提取出来,然后我可以使用 Int32.TryParse?

我知道我可以使用字符缓冲区来解决这个问题,读取每个
Unicode字节入缓冲区,然后第一次找到就停止了
".",然后读出缓冲区创建一个字符串,然后使用
Int32.TryParse 从字符串中提取 int.也就是说,也许我
可以使用StringBuilder方法来CopyTo一个char数组,然后使用a
提取"."之前的数字字符串的技巧

比如——

StringBuilder sb = new StringBuilder ("10345.72");
int count = sb.Length;

char[]temporary_charBuf1 = new char[100];//1 个,共 2 个

sb.Copy(0,temporary_charBuf1,0,count);

char[] charBuf2 = new char [100]//2 of 2

foreach (char c in temporary_charBuf) {//这里的代码:if char is not a
句号,填charBuf2,否则不填,找到句号就中断}

字符串数字字符串 = "";

数字字符串 = 新字符串(charBuf2);//创建新的字符串传递
charBuf2 进入构造函数

现在您的 numericString 应该是原始字符串中的 10345
"10345.72".

但我正在寻找更快或更短的方法(因为这不是一个大
交易,我不想花太多的代码来做它
工作).从上面可以看出,其中甚至不包括
foreach 循环里面的代码,代码很多.

我们可以用一行 LINQ 替换它吗(另外我正在努力学习
LINQ 我去)?
没什么大不了的(伪代码可以)...只是好奇.

RL

推荐答案

raylopez99 <ra********@yahoo.com 写道:

<snip>
我们可以用一行 LINQ 替换它吗(另外我正在努力学习
LINQ 我去)?
没什么大不了的(伪代码可以)......只是好奇.
你*可以*用 LINQ 来做,但它会非常缓慢并且
不可读.这是一个更简单的方法:

public int ParseInt32BeforePeriod(字符串文本)
{
int periodIndex = text.IndexOf(''.'');
if (periodIndex != -1)
{
text = text.Substring(0, periodIndex);
}
返回 int.Parse(text);
}

(你可以把它变成一个 TryParseInt32BeforePeriod 取出
如果需要,可以很容易地返回一个布尔值.)

--
乔恩·斯基特 - <sk***@pobox.com>
网站:http://www.pobox.com/~skeet
博客:http://www.msmvps.com/jon.skeet
深入了解 C#:http://csharpindepth.com

raylopez99 写道:
参考 Int32.TryParse 方法:http://msdn.microsoft.com/en-us/library/zf50za27.aspx
如果必须,特别是这个例子:

numericString = "10345.72"
样式 = NumberStyles.Integer 或 NumberStyles.AllowDecimalPoint
CallTryParse(numericString, 样式)

哪个未能转换字符串"10345.72"?到int 10345,
因为"."后面有多余的数字

我的问题是:是否有一个整洁的"LINQ"?type 的解析方式
一个字符串,以便第一次出现"."(句号)找到,字符串是
提取,然后我可以使用 Int32.TryParse?
int result = (int)Math.Floor(decimal.Parse("10345.72"));

阿伦·哈福德



Alun Harford 写道:
>
int result = (int)Math.Floor(decimal.Parse("10345.72"));
克里普斯,这合法吗?我的天,是的.太棒了.

强化学习

本文地址:https://www.itbaoku.cn/post/1050795.html