Math.Round 表示十进制数
Math.Round for a decimal number
代码:
double PagesCount = 9 / 6 ;
Console.WriteLine(Math.Round(PagesCount, 0));
我试图将 9/6(1,5) 的答案四舍五入为 2,但此代码片段的结果始终为 1。
我怎样才能避免这种情况?
9 / 6
是一个 integer division,其中 returns 是一个整数,然后在您的代码中转换为双精度数。
要获得双除法行为,请尝试
double PagesCount = 9d / 6 ;
Console.WriteLine(Math.Round(PagesCount, 0));
(顺便说一句,我很挑剔,但 .net 世界中的 decimal 指的是 10 进制数,与代码中的 2 进制数不同)
Math.Round
不是这里的问题。
9.0 / 6.0 ==> 1.5
但 9 / 6 ==> 1
因为在第二种情况下执行整数除法。
在混合情况9.0 / 6
和9 / 6.0
中,int
转换为double
并执行double
除法。如果数字作为 int
变量给出,这意味着足以将其中之一转换为 double
:
(double)i / j ==> 1.5
请注意,整数除法由模运算符 %
补充,它产生该除法的余数:
9 / 6 ==> 1
9 % 6 ==> 3
因为6 * 1 + 3 ==> 9
代码:
double PagesCount = 9 / 6 ;
Console.WriteLine(Math.Round(PagesCount, 0));
我试图将 9/6(1,5) 的答案四舍五入为 2,但此代码片段的结果始终为 1。 我怎样才能避免这种情况?
9 / 6
是一个 integer division,其中 returns 是一个整数,然后在您的代码中转换为双精度数。
要获得双除法行为,请尝试
double PagesCount = 9d / 6 ;
Console.WriteLine(Math.Round(PagesCount, 0));
(顺便说一句,我很挑剔,但 .net 世界中的 decimal 指的是 10 进制数,与代码中的 2 进制数不同)
Math.Round
不是这里的问题。
9.0 / 6.0 ==> 1.5
但 9 / 6 ==> 1
因为在第二种情况下执行整数除法。
在混合情况9.0 / 6
和9 / 6.0
中,int
转换为double
并执行double
除法。如果数字作为 int
变量给出,这意味着足以将其中之一转换为 double
:
(double)i / j ==> 1.5
请注意,整数除法由模运算符 %
补充,它产生该除法的余数:
9 / 6 ==> 1
9 % 6 ==> 3
因为6 * 1 + 3 ==> 9