Конверсия из float в decimal
От: StatujaLeha на правах ИМХО
Дата: 03.11.19 20:42
Оценка:
Есть такой код:
using System;

class MainClass {
  public static void Main (string[] args) {
    float v = 0.0f;
    for (int i = 0; i < 1000; ++i)
    {
      v += 0.001f;

      float v1 = v * 1000;
      float v2 = v1 / 1000;
      if (v2 != v)
      {
        var dv = Convert.ToDecimal(v);
        var dv2 = Convert.ToDecimal(v2);
        Console.WriteLine($"{v} - {v2}, {(dv - dv2) == 0}");
      }
    }
  }
}


Выводит следующее:

Mono C# compiler version 4.6.2.0
 mcs -out:main.exe main.cs
 mono main.exe
0.034 — 0.034, True
0.04299998 — 0.04299999, False
0.05199997 — 0.05199996, False
0.1240001 — 0.1240001, True
0.2050002 — 0.2050003, False
0.2200003 — 0.2200003, True
0.2350003 — 0.2350003, True
0.279 — 0.279, True
0.2979997 — 0.2979997, True
0.3429991 — 0.3429992, False
0.3619989 — 0.3619989, True
0.4069983 — 0.4069983, True
0.4259981 — 0.425998, False
0.4709975 — 0.4709975, True
0.4899972 — 0.4899972, True
0.5929959 — 0.592996, False
0.6119957 — 0.6119958, False
0.6309955 — 0.6309954, False
0.7209943 — 0.7209944, False
0.739994 — 0.739994, True
0.7589938 — 0.7589937, False
0.8489926 — 0.8489927, False
0.8679924 — 0.8679925, False
0.8869922 — 0.8869921, False
0.976991 — 0.9769911, False
0.9959908 — 0.9959907, False


Т.е. хочется точно увидеть, какова точная разница между v и v2, используя decimal.

Вопрос: почему же в некоторых столбцах эта разница в decimal равна 0?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.