Есть ли в потоке памяти что блоки как поток файла

Десятичные числа должны всегда использоваться для финансовых вычислений. Размер чисел не важен.

самый легкий путь ко мне для объяснения через некоторый код C#.

double one = 3.05;
double two = 0.05;

System.Console.WriteLine((one + two) == 3.1);

, Что бит кода распечатает Ложь даже при том, что 3.1 равно 3,1...

То же самое..., но десятичное число использования:

decimal one = 3.05m;
decimal two = 0.05m;

System.Console.WriteLine((one + two) == 3.1m);

Это теперь распечатает Верный !

, Если Вы хотите избежать этого вида проблемы, я рекомендую придерживаться десятичных чисел.

14
задан sipwiz 25 September 2009 в 06:33
поделиться

1 ответ

В конце концов я нашел простой способ сделать это, унаследовав от MemoryStream и взяв на себя методы чтения и записи.

public class EchoStream : MemoryStream {

    private ManualResetEvent m_dataReady = new ManualResetEvent(false);
    private byte[] m_buffer;
    private int m_offset;
    private int m_count;

    public override void Write(byte[] buffer, int offset, int count) {
        m_buffer = buffer;
        m_offset = offset;
        m_count = count;
        m_dataReady.Set();
    }

    public override int Read(byte[] buffer, int offset, int count) {
        if (m_buffer == null) {
            // Block until the stream has some more data.
            m_dataReady.Reset();
            m_dataReady.WaitOne();    
        }

        Buffer.BlockCopy(m_buffer, m_offset, buffer, offset, (count < m_count) ? count : m_count);
        m_buffer = null;
        return (count < m_count) ? count : m_count;
    }
}
9
ответ дан 1 December 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: