Я надеюсь, что изучил это достаточно, чтобы моя предпосылка не была полностью ошибочной. Если это так, то математики могут меня поправить.
Я предполагаю, что значение Double
, такое как 12.5
, должно быть округлено до 5 значащих цифр (НЕ десятичных знаков), как 12.500
. Вместо этого, используя следующий код C#, я получаю 12.5
:
Double d = 12.5;
Console.WriteLine(d.ToString("G5"));
Я наткнулся на этот пост от 2007 года. который, кажется, повторяет мою проблему. На самом деле, я использую эти номера примеров только для того, чтобы все было согласовано.
Моя цель здесь состоит в том, чтобы лучше понять следующее:
Правильно ли мое понимание sig figs математически? То есть, разумно ли мое ожидание, или вывод «12,5» как-то верен?
Это действительно (очень долгоживущая) ошибка в фреймворке? Если да, то можно/будет ли это исправлено?
Предполагая, что это ошибка, что я могу сделать с этим сейчас? Написать хак, чтобы определить, сколько sig figs вы фактически вернули, а затем дополнить его? Свернуть мой собственный код, чтобы сделать то, что должна была делать строка формата "G"? Я уже сталкивался с примерами этого на SO, так что, возможно, это свидетельствует о том, что чистого варианта не существует.
Кроме того, я понимаю, что проблемы с хранением Double
могут негативно повлиять на аспект округления этой проблемы, но на данный момент меня интересует только вопрос о большем количестве цифр, чем исходных цифр.
РЕДАКТИРОВАТЬ: я тестировал это до версии 4.5.
decimal
. - person Jon Skeet   schedule 01.12.2014