【发布时间】:2016-10-15 16:09:19
【问题描述】:
一些 SO 用户对我说,我不应该使用 float/double 来计算学生成绩之类的东西,请参阅最后的 cmets:SequenceEqual() is not equal with custom class and float values
“因为用整数进行所有算术运算,然后在最后一分钟转换为合适的显示格式,通常比尝试以浮点格式进行算术运算更容易、更安全。” em>
我试过他说的,但结果并不令人满意。
int grade1 = 580;
int grade2 = 210;
var average = (grade1 + grade2) / 2;
string result = string.Format("{0:0.0}", average / 100);
结果是“3,0”
double grade3 = 5.80d;
double grade4 = 2.10d;
double average1 = (grade3 + grade4) / 2;
double averageFinal = Math.Round(average1);
string result1 = string.Format("{0:0.0}", averageFinal);
结果 1 是 “4,0”
我希望 4,0 因为 3,95 应该导致 4,0。之所以有效,是因为我使用的是 Math.Round,它又只适用于双精度或小数。这不适用于整数。
那么我在这里做错了什么?
【问题讨论】:
-
除非十进制引入了不可接受的性能瓶颈,否则我建议使用十进制而不是标准化整数。两种方法都适用于成绩(浮点和双精度不是),但小数往往更容易考虑。