fround method
Implementation
void fround( MPData a, int prec, [int? mode] ){
int n = getPrec( a ) - prec;
if( n < 1 ){
return;
}
int aa = _froundGet( a, n - 1 );
bool u = false;
bool uu = false;
mode ??= froundHalfEven; // パラメータが2つの場合
switch( mode ){
case froundUp:
uu = true;
break;
case froundDown:
break;
case froundCeiling:
if( a.val(0) > 0 ){ uu = true; }
break;
case froundFloor:
if( a.val(0) < 0 ){ uu = true; }
break;
case froundHalfUp:
if( aa > 4 ){ u = true; }
break;
case froundHalfDown:
if( aa > 5 ){ u = true; }
break;
case froundHalfEven:
if( ClipMath.imod( _froundGet( a, n ), 2 ) == 1 ){
if( aa > 4 ){ u = true; }
} else {
if( aa > 5 ){ u = true; }
}
break;
case froundHalfEven2:
if( mode == froundHalfEven2 && ClipMath.imod( _froundGet( a, n ), 2 ) == 1 && aa > 4 ){
u = true;
break;
}
// そのまま下に流す
continue caseFroundHalfDown2;
caseFroundHalfDown2:
case froundHalfDown2:
if( aa > 5 ){
u = true;
} else if( aa == 5 && n > 1 ){
u = _froundIsNotZero( a, n - 2 );
}
break;
}
if( uu ){
if( aa > 0 ){
u = true;
} else if( n > 1 ){
u = _froundIsNotZero( a, n - 2 );
}
}
if( u ){
_froundZero( a, n );
_froundUp( a, n );
} else {
_froundZero( a, n - 1 );
_froundSet( a, n - 1, 0 );
}
}