Десятичные числа должны всегда использоваться для финансовых вычислений. Размер чисел не важен.
самый легкий путь ко мне для объяснения через некоторый код 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);
Это теперь распечатает Верный !
, Если Вы хотите избежать этого вида проблемы, я рекомендую придерживаться десятичных чисел.
В конце концов я нашел простой способ сделать это, унаследовав от 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;
}
}