« first day (1074 days earlier)      last day (1957 days later) » 

5:48 AM
p
 
 
7 hours later…
12:53 PM
почему 0.301495- 0.301109= 0.00038599999999999746
это че за расчет такой
почему калькулятор умудряется посчитать верно
я понимаю про проблему вычислений с плавающей точкой но блин почему калькулятор то могет, а тут приходится изворачиваться
 
1:08 PM
@vitidev что за калькулятор?
Калькулятор, скорее всего, считает в десятичной системе
или как там
Число с фиксированной запятой
 
обычный виндовый
 
в общем храним целое число и что-то вроде порядка
Ну если считать в decimal, то тоже точно посчитает
    var a = 0.301495m;
    var b = 0.301109m;
    var c = a - b;
    Console.WriteLine(c);
 
 
1 hour later…
2:12 PM
а как мне с дабл получить нормально
Math.Round(0.287824 - 0.287786, 6); ... = "3.8E-05"
 
2:36 PM
@vitidev что значит нормально?
 
хочу отображать 6 знаков после запятой без е-нотации
 
Вы уверены, что результат вообще возможно представить точно в double?
 
вот этого я не знаю
0.287824 - 0.287786 = ну это же не дробь. и ладно нельзя окрулить но что то же можно сделать
хотя я не понимаю почему нельзя округлить до 6го знака
 
Считайте в decimal
Если вам нужна фиксированная точность, то можно хоть в int считать (но выигрыша в сравнении с decimal скорее всего не будет все равно)
 
считать я могу. я хочу понять почему нельзя округлить без е-нотации. почему он вообще в данном варианте вписал е-нотацию
 
2:41 PM
Вписал куда?
 
Math.Round(0.287824 - 0.287786, 6); ... = "3.8E-05"
не 0,000000чо то там, а решил е вписать
 
Куда вы результат выводите?
И как
 
0.301495- 0.301109= 0.00038599999999999746
и
Math.Round(0.287824 - 0.287786, 6); ... = "3.8E-05"

результат смотрелся в отладчике студии. впрочем вывод ToString() такой же
 
Подсказка, если явно не указать формат, то он может выводить не так как вы ожидаете
 
он всегда явный
ToString(CultureInfo.InvariantCulture);
впрочем тут не "не тот вывод" а разный. то 0.00038599999999999746 и тут он е не ставит то 3.8E-05
 
2:46 PM
Я имею ввиду напишите конкретно что вам надо, вроде ToString("0.000000")
@vitidev да где ставит-то? Покажите код
 
double k1 = 0.301495 - 0.301109;
            Console.WriteLine(k1.ToString(CultureInfo.InvariantCulture));

            double k2 = 0.287824 - 0.287786;
            k2 = Math.Round(k2, 6);
            Console.WriteLine(k2.ToString(CultureInfo.InvariantCulture));
результат
0.000385999999999997
3.8E-05
 
Числа разные и форматтер по умолчанию их форматирует по разному
Указывайте формат явно
 
нашел совет
/// <summary>
/// Converts the double to a standard notation string.
/// </summary>
/// <param name="d">The double to convert.</param>
/// <returns>The double as a standard notation string.</returns>
public static String ToStandardNotationString(this double d)
{
//Keeps precision of double up to is maximum
return d.ToString(".#################################################################################################################################################################################################################################################################
чтобы запретить е-нотацию )
 
Ну я вам по это и говорю
 

« first day (1074 days earlier)      last day (1957 days later) »