Справка по округлению .NET - PullRequest
       17

Справка по округлению .NET

0 голосов
/ 27 апреля 2011

У меня есть 10 дробных чисел (двойного типа), которые в сумме составляют 1. Мой клиент хочет показать одно десятичное место в нашей сетке, и я попытался использовать десятичный тип данных Math.Round (Away и Even), но Я просто не могу получить числа, чтобы сложить до 1 (.98). Мои математические навыки отсутствуют, и я не могу понять, как сделать это правильно. Любая помощь будет отличной!

0.429068150 0.222531293 
0.091098748 0.062586926
0.053546592 0.047983310
0.031988873 0.024339360
0.022948540 0.013908206

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Числа, кажется, складываются в нечто очень близкое к одному как есть.

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

Итак, чтобы проиллюстрировать проблему очень быстро: 1,5 + 2,5 = 4, тогда как 1 + 2 = 3. Округление изменило числа, и это изменило результат.

Что вы можете сделать, это отобразить ихв сетке, округленной так, как вы хотите, но сохраняйте версию чисел за кадром с высокой точностью (без заземления) и делайте на ней все.

1 голос
/ 27 апреля 2011

Они складываются до 0.999999998000000.Вы, вероятно, ищете строки формата.Вы можете установить их в свойствах вашего столбца.(Не зная точно, что вы используете, я не могу помочь с тем, где разместить строку формата.)

double i = 0.42906815+0.222531293+0.091098748+0.062586926+0.053546592+0.04798331+0.031988873+0.02433936+0.02294854+0.013908206;
Console.WriteLine(string.Format("{0:N1}", Math.Round(i,1)));

Это печатает 1.0.Обратите внимание на {0:N1}.То есть напечатайте число с одним десятичным знаком.

...