Skip to content

Commit f955c19

Browse files
committed
[修改] 修改定点数的计算错误
1 parent 2a8d858 commit f955c19

1 file changed

Lines changed: 20 additions & 9 deletions

File tree

GameFrameX.Utility/LNumber.cs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,22 @@ public long Ceiling
7171
{
7272
get
7373
{
74-
LNumber r;
75-
r.Raw = (Raw + FRACTION_MASK) & INTEGER_MASK;
76-
77-
return (long)r;
74+
// 如果没有小数部分,直接返回整数部分
75+
if ((Raw & FRACTION_MASK) == 0)
76+
{
77+
return Raw >> FRACTION_BITS;
78+
}
79+
80+
// 有小数部分时,正数向上取整,负数向零取整(即向上取整)
81+
if (Raw > 0)
82+
{
83+
return (Raw >> FRACTION_BITS) + 1;
84+
}
85+
else
86+
{
87+
// 对于负数,向零取整意味着要加1(因为右移对负数是向下取整)
88+
return (Raw >> FRACTION_BITS) + 1;
89+
}
7890
}
7991
}
8092

@@ -85,10 +97,8 @@ public long Floor
8597
{
8698
get
8799
{
88-
LNumber r;
89-
r.Raw = Raw & INTEGER_MASK;
90-
91-
return (long)r;
100+
// 直接右移,这对正数和负数都能正确实现向下取整
101+
return Raw >> FRACTION_BITS;
92102
}
93103
}
94104

@@ -104,7 +114,8 @@ public static LNumber Create(long i, long f)
104114
Debug.LogError("Xnumber 创建失败! " + i + "." + f);
105115
#endif
106116

107-
var sign = (i ^ f) >= 0 ? 1 : -1;
117+
// 确定符号:如果整数部分为负,则结果为负;如果整数部分为0且小数部分为负,则结果为负
118+
var sign = (i < 0 || (i == 0 && f < 0)) ? -1 : 1;
108119

109120
if (i < 0)
110121
{

0 commit comments

Comments
 (0)