Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 银行家';s在省道中成圆_Dart_Double_Precision - Fatal编程技术网

Dart 银行家';s在省道中成圆

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

有人能帮我在Dart中实现银行取整吗

因此,我将3个d.p.四舍五入到最接近的2个d.p.数字,除非该数字介于两者之间的一半,否则它将进入最近的偶数

乙二醇


我有同样的要求,所以我建立了一个

银行家

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