public static int WriteDecimal(Span <byte> span, decimal value) { // Cast the decimal to our struct to avoid the decimal.GetBits allocations. DecimalData data = Unsafe.As <decimal, DecimalData>(ref value); // According to the documentation :- // - word 0: low-order "mantissa" // - word 1, word 2: medium- and high-order "mantissa" // - word 3: mostly reserved; "exponent" and sign bit // In one way, this is broader than AMQP: the mantissa is larger. // In another way, smaller: the exponent ranges 0-28 inclusive. // We need to be careful about the range of word 0, too: we can // only take 31 bits worth of it, since the sign bit needs to // fit in there too. if (data.Mid != 0 || // mantissa extends into middle word data.Hi != 0 || // mantissa extends into top word data.Lo < 0) // mantissa extends beyond 31 bits { return(ThrowWireFormattingException(value)); } span[0] = (byte)((data.Flags >> 16) & 0xFF); WriteLong(span.Slice(1), (data.Flags & 0b1000_0000_0000_0000_0000_0000_0000_0000) | (data.Lo & 0b0111_1111_1111_1111_1111_1111_1111_1111)); return(5); }
public static double roundValue(double LocalAmount, RoundingContextEnum B1Context) { double dbSCAmount = 0; CompanyService objCompanyService = null; try { objCompanyService = MainObject.Instance.B1Company.GetCompanyService(); DecimalData objDecimalData = objCompanyService.GetDataInterface(CompanyServiceDataInterfaces.csdiDecimalData); objDecimalData.Context = B1Context; objDecimalData.Currency = MainObject.Instance.B1AdminInfo.SystemCurrency; objDecimalData.Value = LocalAmount; RoundedData objResult = objCompanyService.RoundDecimal(objDecimalData); dbSCAmount = objResult.Value; } catch (Exception er) { _Logger.Error("", er); } finally { if (objCompanyService != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCompanyService); objCompanyService = null; } } return(dbSCAmount); }
private static void CheckDecimals(List <DecimalData> decimals, TypeSet t, Action CheckContents, ref ParameterType modifiedType) { DecimalData Decimal1 = new DecimalData("decimal1", ParameterType.Parse("feea56b3-d51b-4c60-bb81-96c6e543e096"), 12, -1); DecimalData Decimal2 = new DecimalData("decimal2", ParameterType.Parse("1275ba4a-ff58-492c-ae6f-9e915eefb796"), 15, -1); DecimalData Decimal3 = new DecimalData("decimal3", ParameterType.Parse("729e3aa4-ce76-4dbd-95b8-549dbdec035a"), -123, -1231); var a = Decimal1; t.AddDecimal(a); decimals.Add(a); Assert.That(modifiedType, Is.EqualTo(a.TypeId)); modifiedType = null; CheckContents(); a = Decimal2; t.AddDecimal(a); decimals.Add(a); Assert.That(modifiedType, Is.EqualTo(a.TypeId)); modifiedType = null; CheckContents(); a = Decimal1; t.Remove(a.TypeId); decimals.Remove(a); Assert.That(modifiedType, Is.EqualTo(a.TypeId)); modifiedType = null; CheckContents(); a = Decimal3; t.AddDecimal(a); decimals.Add(a); Assert.That(modifiedType, Is.EqualTo(a.TypeId)); modifiedType = null; CheckContents(); DecimalData Decimal2Replacement = new DecimalData("decimal 2 replacement", ParameterType.Parse("1275ba4a-ff58-492c-ae6f-9e915eefb796"), 345, -345); t.ModifyDecimal(Decimal2Replacement); decimals[decimals.IndexOf(Decimal2)] = Decimal2Replacement; Assert.That(modifiedType, Is.EqualTo(Decimal2Replacement.TypeId)); modifiedType = null; CheckContents(); DecimalData Decimal3Replacement = new DecimalData("Decimal3Replaced", ParameterType.Parse("729e3aa4-ce76-4dbd-95b8-549dbdec035a"), -123, -1231); t.RenameType(Decimal3.TypeId, Decimal3Replacement.Name); decimals[decimals.IndexOf(Decimal3)] = Decimal3Replacement; Assert.That(modifiedType, Is.EqualTo(Decimal3Replacement.TypeId)); modifiedType = null; CheckContents(); }
public static decimal ReadDecimal(ReadOnlySpan <byte> span) { byte scale = span[0]; if (scale > 28) { ThrowInvalidDecimalScale(scale); } uint unsignedMantissa = NetworkOrderDeserializer.ReadUInt32(span.Slice(1)); var data = new DecimalData(((uint)(scale << 16)) | unsignedMantissa & 0x80000000, 0, unsignedMantissa & 0x7FFFFFFF, 0); return(Unsafe.As <DecimalData, decimal>(ref data)); }
public static double getSCValue(double LocalAmount, DateTime date, out string Message, RoundingContextEnum B1Context) { double dbSCAmount = 0; SAPbobsCOM.SBObob objBob = null; SAPbobsCOM.Recordset objRS = null; CompanyService objCompanyService = null; Message = ""; try { objBob = MainObject.Instance.B1Company.GetBusinessObject(BoObjectTypes.BoBridge); objRS = objBob.GetCurrencyRate(MainObject.Instance.B1AdminInfo.SystemCurrency, date); double dbRate = objRS.Fields.Item(0).Value; objCompanyService = MainObject.Instance.B1Company.GetCompanyService(); DecimalData objDecimalData = objCompanyService.GetDataInterface(CompanyServiceDataInterfaces.csdiDecimalData); objDecimalData.Context = B1Context; objDecimalData.Currency = MainObject.Instance.B1AdminInfo.SystemCurrency; objDecimalData.Value = LocalAmount / dbRate; RoundedData objResult = objCompanyService.RoundDecimal(objDecimalData); dbSCAmount = objResult.Value; } catch (Exception er) { _Logger.Error("", er); Message = er.Message; } finally { if (objCompanyService != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCompanyService); objCompanyService = null; } if (objRS != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objRS); objRS = null; } if (objBob != null) { System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objBob); objBob = null; } } return(dbSCAmount); }
/// <summary> /// Populate a domain's various type data from xml /// </summary> /// <param name="domain">The domain to fill</param> /// <param name="root">The xml root node</param> private static void ReadTypes(DomainData domain, XElement root) { foreach (var a in root.Elements("DynamicEnumeration")) { DynamicEnumerationData typeData = new DynamicEnumerationData(a.Attribute("name").Value, Guid.Parse(a.Attribute("guid").Value)); domain.DynamicEnumerations.Add(typeData); } foreach (var a in root.Elements("Enumeration")) { var name = a.Attribute("name").Value; var guid = Guid.Parse(a.Attribute("guid").Value); var values = a.Elements("Value").Select(value => new EnumerationData.Element(value.Attribute("name").Value, Guid.Parse(value.Attribute("guid").Value))); EnumerationData typeData; if (a.Element("Default") != null) { if (a.Element("Default").Attributes("guid").Any()) { var def = Guid.Parse(a.Element("Default").Attribute("guid").Value); typeData = new EnumerationData(name, guid, values, def); } else if (a.Element("Default").Attributes("name").Any()) { var def = a.Element("Default").Attribute("name").Value; typeData = new EnumerationData(name, guid, values, def); } else { throw new Exception("Enumeration declared with a default node but no recognised default value"); } } else { typeData = new EnumerationData(name, guid, values); } domain.Enumerations.Add(typeData); } foreach (var a in root.Elements("Decimal")) { var aName = a.Attribute("name").Value; var guid = Guid.Parse(a.Attribute("guid").Value); var aMax = a.Attributes("max").Select <XAttribute, decimal?>(b => decimal.Parse(b.Value)).SingleOrDefault(); var aMin = a.Attributes("min").Select <XAttribute, decimal?>(b => decimal.Parse(b.Value)).SingleOrDefault(); var aDef = a.Attributes("default").Select <XAttribute, decimal?>(b => decimal.Parse(b.Value)).SingleOrDefault(); DecimalData typeData = new DecimalData(aName, guid, aMax, aMin, aDef); domain.Decimals.Add(typeData); } foreach (var a in root.Elements("Integer")) { var aName = a.Attribute("name").Value; var guid = Guid.Parse(a.Attribute("guid").Value); var aMax = a.Attributes("max").Select <XAttribute, int?>(b => int.Parse(b.Value)).SingleOrDefault(); var aMin = a.Attributes("min").Select <XAttribute, int?>(b => int.Parse(b.Value)).SingleOrDefault(); var aDef = a.Attributes("default").Select <XAttribute, int?>(b => int.Parse(b.Value)).SingleOrDefault(); IntegerData typeData = new IntegerData(aName, guid, aMax, aMin, aDef); domain.Integers.Add(typeData); } }
public Object serializeAnswerData(DecimalData data) { return(((Double)data.Value).ToString()); }