Преобразовать числовую строку в округленное десятичное число (C #) - PullRequest
0 голосов
/ 11 февраля 2019

Извините за глупый вопрос, но я получаю это значение из базы данных

"7.545720553985866E+29"

Мне нужно преобразовать это значение в десятичное число, округленное до 6 цифр.Каков наилучший способ сделать это?Я попытался

var test = double.Parse("7.545720553985866E+29");
test = Math.Round(test, 6);
var test2 = Convert.ToDecimal(test);

, но значение остается неизменным, и преобразование падает.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Может быть, вы можете подстроковать его, а затем после разбора.

var test = "7.545720553985866E + 29". Substring (0,8);// 7.545720

test = Math.Round (test, 6);

var test2 = Convert.ToDecimal (test);

0 голосов
/ 11 февраля 2019

Вы можете использовать это для округления до 6 значащих цифр:

round(test, 6 - int(math.log10(test)))

Полученное из этого значение равно

7.545721e+29

Это работает с использованием log10 из mathмодуль, чтобы получить степень 10 в test, округляет его до целого числа, вычитает, что из 6 затем использует round для получения желаемых цифр.

Как отмечали другие, round работаетна указанное количество знаков после запятой.log10 и остальные цифры показывают, сколько десятичных знаков необходимо, чтобы получить желаемое количество значащих цифр.Если десятичные разряды отрицательны, round округляется слева от десятичной запятой.

Вы должны знать, что log10 не совсем точна, и взятие int из этого может быть отключено отожидаемое значение на единицу.Такое случается редко, но бывает.Кроме того, даже если вычисленное значение является правильным, преобразование значения в строку (например, при его печати) может дать результат, отличный от ожидаемого.Если вам нужна идеальная точность, вам лучше работать со строковым представлением значения.

0 голосов
/ 11 февраля 2019

Math.Round округляет до N цифр справа от десятичной точки .Ваш номер не имеет цифр справа от десятичного числа (это эквивалентно 754,572,055,398,586,600,000,000,000,000), поэтому округление не меняет значение.

Если вы хотите округлить до N значащие цифры , тогда посмотрите на некоторые из существующих ответов:

Округлите от двойного до x значащих цифр

Округление ЗНАЧИТЕЛЬНЫХ цифр в двойном, а не до десятичных разрядах

преобразование завершается неудачей.

Это потому, что значениеслишком большой для decimal.Наибольшее значение, которое может хранить decimal, равно 7.9228E+28 - ваше значение примерно в 10 раз больше этого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...