从小数中获取最后一位
Get last digit from a decimal
我有一个问题。在我的例子中,我想检索十进制值的最后一位以便进行舍入调整。以下是我的代码:
private void calculateADJ()
{
string result = Strings.Right(txtGTotal.Text, 1);
if (result == "1" || result == "6")
{
txtStoreRA.Text = "-0.01";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.01).ToString("0.00");
}
if (result == "2" || result == "7")
{
txtStoreRA.Text = "-0.02";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.02).ToString("0.00");
}
if (result == "3" || result == "8")
{
txtStoreRA.Text = "0.01";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + 0.01).ToString("0.00");
}
if (result == "4" || result == "9")
{
txtStoreRA.Text = "0.02";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + 0.02).ToString("0.00");
}
else
{
txtOutstanding.Text = txtGTotal.Text;
}
}
例如,如果数字是11.93,它会把它转换成11.95。任何建议或帮助将不胜感激。供您参考,我在 Visual studio 2005 年使用 Pocket PC 模拟器 2003 执行此操作。
我的问题是值没有像我预期的那样改变。
当我运行我的程序,比如txtGTotal.Text=11.94,那么我的txtOutStanding.Text应该是11.95。不过,txtOutStanding.Text还是11.94。
不知道是谁投的,至少你能给我解释一下。毫无理由地投入感觉很糟糕,一个理由至少可以在下次提问之前有所改进。谢谢
我想说 Ian 的回答比我复制的 post 中提供的答案清楚得多。
因为你的最小单位是(0.05
,也就是最小的int
1
的1/20th
,最简单的方法就是用你的值乘以20
首先在使用 Math.Round
进行舍入之前,然后根据需要将其还原。
或者,更简单地说,您可以将此 0.05
定义为您的 lowestUnit
例如,假设您有:
txtGTotal.Text = "11.93";
double val = double.Parse(txtGTotal.Text);
这样做:
double myLowestUnit = 0.05;
double result = myLowestUnit * Math.Round(val/myLowestUnit); //this will give you 11.95
txtOutStanding.Text = result.ToString("f2"); //use f2 to limit the number of string printed to two decimal places
要从 TextBox
中获取 val
,只需使用 double.Parse(txtGTotal.Text);
请注意,您可以使用 string.ToString("f2")
以您想要的格式在 txtOutStanding
TextBox
.
中打印值
我有一个问题。在我的例子中,我想检索十进制值的最后一位以便进行舍入调整。以下是我的代码:
private void calculateADJ()
{
string result = Strings.Right(txtGTotal.Text, 1);
if (result == "1" || result == "6")
{
txtStoreRA.Text = "-0.01";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.01).ToString("0.00");
}
if (result == "2" || result == "7")
{
txtStoreRA.Text = "-0.02";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) - 0.02).ToString("0.00");
}
if (result == "3" || result == "8")
{
txtStoreRA.Text = "0.01";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + 0.01).ToString("0.00");
}
if (result == "4" || result == "9")
{
txtStoreRA.Text = "0.02";
txtOutstanding.Text = (Convert.ToDouble(txtGTotal.Text) + 0.02).ToString("0.00");
}
else
{
txtOutstanding.Text = txtGTotal.Text;
}
}
例如,如果数字是11.93,它会把它转换成11.95。任何建议或帮助将不胜感激。供您参考,我在 Visual studio 2005 年使用 Pocket PC 模拟器 2003 执行此操作。
我的问题是值没有像我预期的那样改变。
当我运行我的程序,比如txtGTotal.Text=11.94,那么我的txtOutStanding.Text应该是11.95。不过,txtOutStanding.Text还是11.94。
不知道是谁投的,至少你能给我解释一下。毫无理由地投入感觉很糟糕,一个理由至少可以在下次提问之前有所改进。谢谢
我想说 Ian 的回答比我复制的 post 中提供的答案清楚得多。
因为你的最小单位是(0.05
,也就是最小的int
1
的1/20th
,最简单的方法就是用你的值乘以20
首先在使用 Math.Round
进行舍入之前,然后根据需要将其还原。
或者,更简单地说,您可以将此 0.05
定义为您的 lowestUnit
例如,假设您有:
txtGTotal.Text = "11.93";
double val = double.Parse(txtGTotal.Text);
这样做:
double myLowestUnit = 0.05;
double result = myLowestUnit * Math.Round(val/myLowestUnit); //this will give you 11.95
txtOutStanding.Text = result.ToString("f2"); //use f2 to limit the number of string printed to two decimal places
要从 TextBox
中获取 val
,只需使用 double.Parse(txtGTotal.Text);
请注意,您可以使用 string.ToString("f2")
以您想要的格式在 txtOutStanding
TextBox
.