У меня есть float
число: 10071072872302
, и мне нужно преобразовать его в decimal
.
float number = 10071072872302f;
var convertNumber = Convert.ToDecimal(number);
Я получаю значение: 10071070000000
, что Неверно .
Если сначала преобразовать его в double
, а затем преобразовать в decimal
:
float number = 10071072872302f;
var convertNumber = Convert.ToDecimal(Convert.ToDouble(number));
, я получу значение: 10071073357824
, которое также Неправильно .
Если я просто конвертирую float
в double
:
float number = 10071072872302f;
var convertNumber = Convert.ToDouble(number);
, я получаю значение: 10071073357824
, равное Неправильно .
Я действительно смущен. База данных моей компании разработана с типом данных decimal
. Мне нужно программно рассчитать значение данных в соответствии с предварительно сконфигурированной формулой, мне нужно использовать библиотеку NCalc
, которая возвращает тип данных с плавающей запятой. К сожалению, я не могу преобразовать float
в десятичную`.
Может ли кто-нибудь помочь мне с этим тупиком?
РЕДАКТИРОВАТЬ Я хочу уточнить, почему мне нужно преобразовать число с плавающей точкой в десятичное число.
Чтобы получить значение , Мне нужно вычислить выражение как: ISA16+ISA8+ISNULL(MAX((ABS(BSMS10)-ABS(BSMS10_)),0),0)
После взятия данных в базе данных для замены выражения, у меня есть такое выражение: 10071072872302+872302+MAX((ABS(-072872302)-ABS(2302)),0)
Чтобы вычислить значение В этом выражении я использую библиотеку NCalc
private static object CalculateString(string formula)
{
var expression = new Expression(formula);
expression.EvaluateFunction += (name, args) =>
{
switch (name)
{
case "ABS":
args.Result = Math.Abs(Convert.ToDouble(args.Parameters[0].Evaluate()));
break;
case "MAX":
args.Result = Math.Max(Convert.ToDouble(args.Parameters[0].Evaluate()), Convert.ToDouble(args.Parameters[1].Evaluate()));
break;
}
};
var value = expression.Evaluate();
return value;
}
Выражения бывают разных форм. Однако, чтобы проверить значение, я попытался проверить с помощью числа 10071072872302
var result = CalculateString("10071072872302");
В результате я получил значение с плавающей запятой, поэтому мне нужно преобразовать его в десятичное значение, чтобы соответствовать типу данных в база данных. Вот почему я поставил вопрос выше.