前,我的号码是345.38,223.805555,21.3333。我想得到小数点后的数字并将其四舍五入。
345.38 --> 4
2323.805555 --> 8
21.3333 --> 3
答案 0 :(得分:7)
乘以10
上限(总是向上舍入,如果低于0.5,则使用'round'向下舍入)
按10
查找修改结果像:
float myFloat = 123.38f;
float myBiggerFloat = Math.Ceiling(myFloat * 10.0f);
int theAnswer = ((int)myBiggerFloat % 10);
或者只是在SO上寻求家庭作业的帮助,无论哪种方式似乎都有效。
答案 1 :(得分:4)
这可以避免潜在的溢出问题:
decimal value;
string[] sep = new[] { NumberFormatInfo.CurrentInfo.NumberDecimalSeparator };
String.Format("{0:0.0}", Math.Round(value, 1)).Split(sep, StringSplitOptions.None)[1][0];
击> <击> 撞击>
这可以避免字符串转换和溢出问题:
decimal value;
decimal absValue = Math.Abs(value);
decimal fraction = absValue - Math.Floor(absValue);
int lastDigit = Convert.ToInt32(10 * Math.Round(fraction, 1));
答案 2 :(得分:0)
得到小数部分,乘以10,然后舍入:
double n = 345.38;
int digit = (int)Math.Round((n - Math.Floor(n)) * 10);
这可以避免任何溢出问题,因为在转换为int时结果已经降到一位数。
我已经确认这会为您的示例提供所需的结果。
答案 3 :(得分:0)
这整个溢出的讨论有点学术性,很可能不是你的功课的意图。但是你想解决这个问题:
decimal value = -0.25m;
decimal fractionalPart = Math.Abs(value - Math.Truncate(value));
int digit = (int)Math.Round(10 * fractionalPart, MidpointRounding.AwayFromZero);
编辑:在再次阅读您的问题之后,我注意到数字不应该像我原来的答案一样整理向上。但是,大多数使用Math.Round的人都使用默认银行家的舍入(到偶数)。这取决于你是否打算-0.25得到2或3.我正在阅读你的描述的方式,它应该是3,就像在这个例子中一样。
答案 4 :(得分:0)
如果你只是想要紧跟小数点后面的数字...你不能做这样的事吗?
float value;
int digit = (int)(((value % 1) * 10) + 0.5)
答案 5 :(得分:-1)
float myNum = 10.11;
char c = myNum[myNum.ToString().IndexOf(".") + 1];