Я хочу свой торт и съесть его. Я хочу украсить (округлить) числа в максимально возможной степени, не ставя под угрозу точность других вычислений. Я использую двойники в С# (также с некоторыми манипуляциями с преобразованием строк).
Вот в чем проблема. Я понимаю ограничения, присущие представлению чисел double
(поэтому, пожалуйста, не объясняйте это). ОДНАКО, я хочу каким-то образом округлить число, чтобы оно выглядело эстетически приятным для конечного пользователя (я делаю калькулятор). Проблема в том, что округление по X значащих цифр работает в одном случае, но не в другом, а округление до десятичного знака работает в другом, но не в первом случае.
Наблюдать:
- СЛУЧАЙ A: Math.Sin(Math.Pi) = 0,000000000000000122460635382238
- СЛУЧАЙ B: 0,000000000000001/3 = 0,0000000000000003333333333333333
В первом случае я хочу округлить до ДЕСЯТИЧНЫХ ЗНАКОВ. Это дало бы мне хороший аккуратный ноль, который я ищу. Округление по цифрам Sig означало бы, что я тоже оставлю ошибочные цифры.
Однако во втором случае я хочу округлить ЗНАЧИТЕЛЬНЫЕ ЦИФРЫ, так как я потеряю массу точности, если округлю только десятичные знаки.
Есть ли общий способ, которым я могу удовлетворить оба типа расчета?