1. On my first question I think up, if we serialize only positive numbers, we can write sign in first byte, because it is positive always. I will try to make this decision
2017-02-03 12:48 GMT+03:00 Pavel Tupitsyn <[email protected]>: > Vyacheslav, > > I see the problem now. Yes, negative scale is not supported in .NET. > > I don't think we should do the multiplication. As you described, this will > break equality on Java side. SQL queries might be broken, etc. > I think we should throw an exception in .NET when encountering negative > decimal scale. > > Vladimir O, any thoughts? > > Pavel > > On Fri, Feb 3, 2017 at 12:01 PM, Vyacheslav Daradur <[email protected]> > wrote: > > > Hello. > > > > I looked and understood the code of methods ReadDecimal and WriteDecimal > > on .NET platform. > > > > 1. At the moment remaking of this methods for my Java-decimal-fix is very > > difficult, it needs to write new methods for > serialization/deserialization > > of negative decimals. > > > > I can make it, but there is simpler decision: to add additional byte for > > sign. > > > > I need advice: difficult solution (new methods .net) Versus : simple > > solutions (additional byte)? > > > > *I don't know yet, what changes are necessary on ะก++ platform. > > > > 2. I see a problem with the negative scale on .NET platform. > > > > Now negative scale is forbidden. > > > > We can make: > > if (scale < 0) return Decimal.Multiply(new decimal(lo, mid, hi, neg, 0), > > new decimal(Math.Pow(10, -scale))); > > > > But there is the problem: > > * 1 Serialize in Java; number=123456789, scale=-4 > > * 2 Deserialize in .NET; number=1234567890000, scale=0 > > * 3 Serialize in .NET; number=1234567890000, scale=0 > > * 4 Deserialize in Java; number=1234567890000, scale=0 > > > > Logically: (1) 123456789 * 10^4 == (2) 1234567890000 > > > > In Java (1) not equal (2), because scales are different. > > > > Any thougths? > > > > 2017-01-31 14:08 GMT+03:00 Pavel Tupitsyn <[email protected]>: > > > >> Vyacheslav, > >> > >> I'm not sure I understand the code you attached. > >> > >> If you know how to fix the .NET part, can you just do it in your PR and > >> run "Platform .NET" on TeamCity to verify? > >> http://ci.ignite.apache.org/viewType.html?buildTypeId=Ignite > >> Tests_IgnitePlatformNet > >> > >> Thanks, > >> > >> Pavel > >> > >> On Tue, Jan 31, 2017 at 1:35 PM, Vyacheslav Daradur < > [email protected]> > >> wrote: > >> > >>> Pavel, I see that you are the main contributor of Ignite.NET. > >>> > >>> We should repair BinaryUtils#ReadDecimal and BinaryUtils#WriteDecimal. > >>> > >>> *ReadDecimal: > >>> byte[] mag = ReadByteArray(stream); // including at least one sign bit, > >>> which is (ceil((this.bitLength() + 1)/8)) > >>> bool neg = (mag[0] < 0); > >>> if (scale < 0) > >>> // TODO: a scale of -3 means the unscaled value is multiplied by 1000 > >>> > >>> *WriteDecimal: > >>> int sign = vals[3] < 0 ? -1 : 0; > >>> stream.WriteInt(sign); > >>> > >>> Can you help with this task? > >>> > >>> > >>> 2017-01-31 12:46 GMT+03:00 Igor Sapego <[email protected]>: > >>> > >>>> Vyacheslav, > >>>> > >>>> I had a look at your PR and left some comments in Jira. > >>>> > >>>> Best Regards, > >>>> Igor > >>>> > >>>> On Mon, Jan 30, 2017 at 12:52 PM, Vyacheslav Daradur < > >>>> [email protected]> > >>>> wrote: > >>>> > >>>> > Hello. I fixed it. Please, review. > >>>> > > >>>> > https://issues.apache.org/jira/browse/IGNITE-3196 - Marshaling > works > >>>> wrong > >>>> > for the BigDecimals that have negative scale > >>>> > > >>>> > >>> > >>> > >> > > >
