Dart 银行家';s在省道中成圆
有人能帮我在Dart中实现银行取整吗 因此,我将3个d.p.四舍五入到最接近的2个d.p.数字,除非该数字介于两者之间的一半,否则它将进入最近的偶数 乙二醇Dart 银行家';s在省道中成圆,dart,double,precision,Dart,Double,Precision,有人能帮我在Dart中实现银行取整吗 因此,我将3个d.p.四舍五入到最接近的2个d.p.数字,除非该数字介于两者之间的一半,否则它将进入最近的偶数 乙二醇 我有同样的要求,所以我建立了一个 银行家 import 'dart:math'; import 'package:decimal/decimal.dart'; Decimal _getDecimalOfNumber(Decimal number, int fractionDigits) => number - (number.fl
我有同样的要求,所以我建立了一个 银行家
import 'dart:math';
import 'package:decimal/decimal.dart';
Decimal _getDecimalOfNumber(Decimal number, int fractionDigits) => number - (number.floor());
Decimal _pow10(int powNum) => Decimal.parse(pow(10, powNum).toString());
Decimal _carryLatest(Decimal number) {
int decimalLength = number.toString().length - 2;
Decimal offset = _pow10(-decimalLength);
return number + offset;
}
Decimal bankerRound(Decimal value, int fractionDigits) {
// integer of number
Decimal integerOfNumber = value.floor();
// decimal of number
Decimal decimalOfNumber = _getDecimalOfNumber(value, fractionDigits);
// remain flag
int remainFlag = (decimalOfNumber * _pow10(fractionDigits + 1) % Decimal.fromInt(10)).toInt();
Decimal finalMultiple = _pow10(fractionDigits);
Decimal finalDecimalOfNumber = ((decimalOfNumber * finalMultiple).floor() / finalMultiple);
if (remainFlag <= 4) {
// do nothing
} else if (remainFlag >= 6) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// check bottom has number
bool hasBottom = _getDecimalOfNumber(decimalOfNumber * _pow10(fractionDigits + 1), fractionDigits) != Decimal.zero;
if (hasBottom) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// check pre remain flag
int preLastNumber = (decimalOfNumber * _pow10(fractionDigits) % Decimal.fromInt(10)).toInt();
if (preLastNumber.isOdd) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// do nothing
}
}
}
return integerOfNumber + finalDecimalOfNumber;
}
import'dart:math';
导入“package:decimal/decimal.dart”;
Decimal _getDecimalOfNumber(十进制数,整数分位数)=>number-(number.floor());
Decimal-pow10(intpownum)=>Decimal.parse(pow(10,powNum.toString());
十进制_carryLatest(十进制数){
int decimalLength=number.toString().length-2;
十进制偏移量=_pow10(-decimalLength);
返回编号+偏移量;
}
十进制bankeround(十进制值,整数分位数){
//整数
十进制整数fNumber=value.floor();
//十进制数
十进制小数位数=_getDecimalOfNumber(数值,分位数);
//留旗
int remafling=(小数位数*_pow10(分数位数+1)%Decimal.fromInt(10)).toInt();
十进制最终倍数=_pow10(分位数);
十进制finalDecimalOfNumber=((十进制数*finalMultiple).floor()/finalMultiple);
如果(重燃=6){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//检查底部是否有数字
bool hasBottom=_getDecimalOfNumber(decimalOfNumber*_pow10(fractionDigits+1),fractionDigits)!=Decimal.0;
如果(底部){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//检查保留前标志
int preLastNumber=(小数位数*_pow10(分数位数)%Decimal.fromInt(10)).toInt();
if(预lastNumber.isOdd){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//无所事事
}
}
}
返回整数fNumber+最终CimalofNumber;
}
我有相同的需求,所以我构建了一个
银行家
import 'dart:math';
import 'package:decimal/decimal.dart';
Decimal _getDecimalOfNumber(Decimal number, int fractionDigits) => number - (number.floor());
Decimal _pow10(int powNum) => Decimal.parse(pow(10, powNum).toString());
Decimal _carryLatest(Decimal number) {
int decimalLength = number.toString().length - 2;
Decimal offset = _pow10(-decimalLength);
return number + offset;
}
Decimal bankerRound(Decimal value, int fractionDigits) {
// integer of number
Decimal integerOfNumber = value.floor();
// decimal of number
Decimal decimalOfNumber = _getDecimalOfNumber(value, fractionDigits);
// remain flag
int remainFlag = (decimalOfNumber * _pow10(fractionDigits + 1) % Decimal.fromInt(10)).toInt();
Decimal finalMultiple = _pow10(fractionDigits);
Decimal finalDecimalOfNumber = ((decimalOfNumber * finalMultiple).floor() / finalMultiple);
if (remainFlag <= 4) {
// do nothing
} else if (remainFlag >= 6) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// check bottom has number
bool hasBottom = _getDecimalOfNumber(decimalOfNumber * _pow10(fractionDigits + 1), fractionDigits) != Decimal.zero;
if (hasBottom) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// check pre remain flag
int preLastNumber = (decimalOfNumber * _pow10(fractionDigits) % Decimal.fromInt(10)).toInt();
if (preLastNumber.isOdd) {
// carry
finalDecimalOfNumber = _carryLatest(finalDecimalOfNumber);
} else {
// do nothing
}
}
}
return integerOfNumber + finalDecimalOfNumber;
}
import'dart:math';
导入“package:decimal/decimal.dart”;
Decimal _getDecimalOfNumber(十进制数,整数分位数)=>number-(number.floor());
Decimal-pow10(intpownum)=>Decimal.parse(pow(10,powNum.toString());
十进制_carryLatest(十进制数){
int decimalLength=number.toString().length-2;
十进制偏移量=_pow10(-decimalLength);
返回编号+偏移量;
}
十进制bankeround(十进制值,整数分位数){
//整数
十进制整数fNumber=value.floor();
//十进制数
十进制小数位数=_getDecimalOfNumber(数值,分位数);
//留旗
int remafling=(小数位数*_pow10(分数位数+1)%Decimal.fromInt(10)).toInt();
十进制最终倍数=_pow10(分位数);
十进制finalDecimalOfNumber=((十进制数*finalMultiple).floor()/finalMultiple);
如果(重燃=6){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//检查底部是否有数字
bool hasBottom=_getDecimalOfNumber(decimalOfNumber*_pow10(fractionDigits+1),fractionDigits)!=Decimal.0;
如果(底部){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//检查保留前标志
int preLastNumber=(小数位数*_pow10(分数位数)%Decimal.fromInt(10)).toInt();
if(预lastNumber.isOdd){
//携带
finalDecimalOfNumber=_carryLatest(finalDecimalOfNumber);
}否则{
//无所事事
}
}
}
返回整数fNumber+最终CimalofNumber;
}
这是一个经过测试的整数算法。
对于十进制(100%准确):
import'dart:math';
导入“package:decimal/decimal.dart”;
var_halfDec=Decimal.parse('0.5');
十进制bankerounddecimal(十进制值){
var rounded=value.round();
如果(四舍五入-值==\u halfDec)
if(value.ceil().toInt()%2!=0)
四舍五入=值。下限();
返回四舍五入;
}
双倍:
double bankeround(双值){
var rounded=value.roundToDouble();
如果((四舍五入-值)*100.round()==50)
if(value.ceil()%2!=0)
四舍五入=值。FloorTouble();
返回四舍五入;
}
这是一个经过测试的整数算法。
对于十进制(100%准确):
import'dart:math';
导入“package:decimal/decimal.dart”;
var_halfDec=Decimal.parse('0.5');
十进制bankerounddecimal(十进制值){
var rounded=value.round();
如果(四舍五入-值==\u halfDec)
if(value.ceil().toInt()%2!=0)
四舍五入=值。下限();
返回四舍五入;
}
双倍:
double bankeround(双值){
var rounded=value.roundToDouble();
如果((四舍五入-值)*100.round()==50)
if(value.ceil()%2!=0)
四舍五入=值。FloorTouble();
返回四舍五入;
}
wow。。。如果这种语言的开发者声称这是一个特性,我很好奇为什么…也许值得去看看这个markusrambarkus哇。。。如果这种语言的开发人员声称这是一个特性,我很好奇为什么…可能值得去看看markusrambarkus