我有一个看起来像这样的字符串:
TEXT MORETEXT 227.905 174.994 180 1111
我很好奇如何将小数改为只有2个位置。
所以不是上面的字符串,我希望它是:
TEXT MORETEXT 227.90 174.99 180 1111 #rounding down
TEXT MORETEXT 227.91 174.99 180 1111 #rounding up
有没有人知道如何获取此字符串并将值更改为小数,然后将小数减小?
修改 的
所以如果我有一个文件:(注意:文件有多行)
TEXT MORETEXT 227.905 174.994 180 1111
TEXT MORETEXT 227.905 174.994 180 1111
TEXT MORETEXT 227.905 174.994 180 1111
我希望它像这样进入RichTextBox
:
TEXT MORETEXT 227.90 174.99 180 1111
TEXT MORETEXT 227.90 174.99 180 1111
TEXT MORETEXT 227.90 174.99 180 1111
我怎么能这样做?
的 EDIT2: 的
string[] listOneLines = null;
string[] listTwoLines = null;
string[] listUserLines = null;
// Splits the lines in the rich text boxes
listOneLines = removePKG1EndingsRichTextBox.Text.Split('\n');
listTwoLines = removePKG2EndingsRichTextBox.Text.Split('\n');
listUserLines = removeUserEndingsRichTextBox.Text.Split('\n');
string[] myLines = removePKG1EndingsRichTextBox.Text.Split('\n');
StringBuilder sb = new StringBuilder();
foreach(string myLine in myLines)
{
string[] piecesStringArray = removePKG1EndingsRichTextBox.Text.Split(' '); //Assuming those are tabs
double d1 = Convert.ToDouble(piecesStringArray[2]);
double d2 = Convert.ToDouble(piecesStringArray[3]);
double round1 = Math.Round(d1, 2);
double round2 = Math.Round(d2, 2);
sb.AppendLine(piecesStringArray[0] + piecesStringArray[1] + round1 + round2 + piecesStringArray[4] + piecesStringArray[5]);
}
listOneLines = sb.ToString(); #does not work..
// Set the selection mode to multiple and extended.
placementOneListBox.SelectionMode = SelectionMode.MultiExtended;
placementTwoListBox.SelectionMode = SelectionMode.MultiExtended;
userDefinedListBox.SelectionMode = SelectionMode.MultiExtended;
// Shutdown the painting of the ListBox as items are added.
placementOneListBox.BeginUpdate();
placementTwoListBox.BeginUpdate();
userDefinedListBox.BeginUpdate();
// Display the items in the listbox.
foreach (var item in listOneLines)
placementOneListBox.Items.Add(item);
foreach (var item2 in listTwoLines)
placementTwoListBox.Items.Add(item2);
foreach (var item3 in listUserLines)
userDefinedListBox.Items.Add(item3);
// Allow the ListBox to repaint and display the new items.
placementOneListBox.EndUpdate();
placementTwoListBox.EndUpdate();
userDefinedListBox.EndUpdate();
在将其上传到ListBox
之前,我试图减少RTB中每一行的十进制值。但是我正在努力......
答案 0 :(得分:2)
您可以使用:
string[] piecesStringArray = myLine.Split('\t'); //Assuming those are tabs
double d1 = Convert.ToDouble(piecesStringArray[2];
double d2 = Convert.ToDouble(piecesStringArray[3];
double round1 = Math.Round(d1, 2);
double round2 = Math.Round(d2, 2);
//Now recreate your string
当然你应该添加错误检查等。如果你想反对传统的舍入,请查看Math.Floor()和Math.Ceil()。您需要将数量除以10的幂才能使其正常工作。
要获取myLine,您可以使用:
string[] myLines = entireFileText.Split(Environment.NewLine);
for(string myLine in myLines)
{
//Previous code
}
答案 1 :(得分:2)
string s = @"
TEXT MORETEXT 227.905 174.994 180 1111
TEXT MORETEXT 227.905 174.994 180 1111";
string newS = Regex.Replace(s,
"[0-9]+(.[0-9]+)?",
m => string.Format("{0:0.##}", double.Parse(m.Value)),
RegexOptions.Singleline);
答案 2 :(得分:0)
您需要按照以下步骤操作:
每一步都是另一个问题。
要解决第一个问题,您需要知道字符串的格式。总是有这个顺序的数字?要解析字符串,可以使用类Array(Split)的正则表达式或方法。
从字符串中提取数字后,您可以使用Math类的方法来舍入数字。您可以编写自己的版本。