我正在尝试转换包含双数字(如“1.1”)的文本框中的项目。有没有一种方法可以对其进行格式化,以便删除“.1”并将其分配给变量“points”?
有没有办法可以从文本框“txtTotal”中转换项目,其中包含“1.1”以进行格式化以保存点之前的数字,然后将其分配给points变量,并指向然后输出“1”?
int points;
txtTotal.Text = string.Format("£{0:0}");
points = Convert.ToInt32(txtTotal.Text);
MessageBox.Show("{points}");
感谢您的帮助!
答案 0 :(得分:3)
如果您只想删除小数点后的所有数字,请使用Math.Truncate();
http://msdn.microsoft.com/en-us/library/vstudio/c2eabd70(v=vs.110).aspx
答案 1 :(得分:1)
您可以尝试Split
小数点上的文本,然后使用£
从第一个数组索引中删除TrimStart
,我会使用int.TryParse
来检查输出是否有效。
像这样:
int points;
txtTotal.Text = string.Format("£{0:0}",txtTotal.Text);
if(int.TryParse((txtTotal.Text.Split('.')[0].TrimStart('£')),out points))
MessageBox.Show(points.ToString());
答案 2 :(得分:1)
看起来您正在尝试提取浮点(double
)值的小数部分,其字符串格式为货币
我会做这样的事情:
using System.Globalization; // For NumberStyles enum
var currencyString = txtTotal.Text;
// Parse the TextBox.Text as a currency value.
double value;
var parsedSuccesfully = double.TryParse(currencyString,
NumberStyles.Currency,
null,
out value);
// TODO: Handle parsing errors here.
var wholePounds = Math.Truncate(value);
var fractionalPounds = (value - wholePounds);
// Get the whole and fractional amounts as integer values.
var wholePoundsInteger = (int)wholePounds;
var fractionalPoundsInteger = (int)(fractionalPounds * 1000.0); // 3 decimal places
答案 3 :(得分:0)
如果您只想在MessageBox
中显示它,可以将其作为字符串处理:
string points = txtTotal.Text;
points = points.Substring(0, points.IndexOf("."));
MessageBox.Show(points);
答案 4 :(得分:0)
如果文本本身是货币格式(磅,从它的外观),你应该首先得到原始字符串并通过指定货币的NumberStyle和适当的文化(例如对于en)将其转换为十进制-GB):
string rawText = txtTotal.Text;
decimal currencyValue = Decimal.Parse(rawText, NumberStyles.Currency, new CultureInfo("en-GB"));
最后,使用Math方法截断(或舍入,如果你想要舍入):
int finalValue = Math.Truncate(currencyValue);
如果它不是货币格式,并且只是简单的双重格式,那么对double的更直接的解析就足够了:
double doubleValue = Double.Parse(txtTotal.Text);
int finalValue = Math.Truncate(doubleValue);
如果格式不一致,可能需要先使用TryParse
方法(而不是直接Parse
)来处理任何解析问题。