File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 {
You can’t perform that action at this time.
0 commit comments