Двойные числа не имеют десятичных разрядов - для начала они не основаны на десятичных цифрах.Вы можете получить «ближайший двойник к текущему значению при усечении до трех десятичных цифр», но он все равно не будет таким же.Вам было бы лучше использовать decimal
.
Сказав, что, если проблема заключается только в способе округления, вы можете использовать Math.Truncate(value * 1000) / 1000;
, который может делать то, что выхочу.(Вы не хотите, чтобы округлял вообще, по звукам этого.) Это все еще потенциально "хитроумно", хотя, в результате все равно на самом деле не будет просто три десятичных знака.Однако, если вы сделали то же самое с десятичным значением, оно будет работать :
decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878
РЕДАКТИРОВАТЬ: Как указал Л.Бушкин, вы должны быть свободны между усечениями для отображения целей (что обычно можно сделать в спецификаторе формата) и усечение для дальнейших вычислений (в этом случае вышеприведенное должно работать).