Skip to content

Commit

Permalink
Merge pull request #3 from MichaelGG/decimal_fixes
Browse files Browse the repository at this point in the history
ENG-4021 - decimal scaling issues
  • Loading branch information
aweisberg committed Mar 7, 2013
2 parents 43b688f + eeae0fe commit 8d88f26
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 23 deletions.
15 changes: 7 additions & 8 deletions VoltDB.Data.Client/Types/ThirdParty.BigDecimal.cs
Expand Up @@ -140,10 +140,11 @@ namespace VoltDB.ThirdParty.Math
#pragma warning disable 1591
public struct BigDecimal
{
private BigInteger biNumber;
private int iScale;
private static string DecimalSeparator = CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;
private static string GroupSeparator = CultureInfo.InvariantCulture.NumberFormat.CurrencyGroupSeparator;
private readonly BigInteger biNumber;
private readonly int iScale;
private static readonly string DecimalSeparator = CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;
private static readonly string GroupSeparator = CultureInfo.InvariantCulture.NumberFormat.CurrencyGroupSeparator;
private static readonly BigInteger ten = new BigInteger(10);

public BigDecimal(long num)
{
Expand Down Expand Up @@ -293,7 +294,7 @@ public int Scale

public BigDecimal setScale(int val)
{
BigInteger ten = new BigInteger(10);
if (val == iScale) return this;
BigInteger num = biNumber;
if (val > iScale)
for (int i = 0; i < val - iScale; i++)
Expand Down Expand Up @@ -436,7 +437,6 @@ public BigDecimal MovePointRight(int n)
return new BigDecimal(biNumber, iScale - n);
else
{
BigInteger ten = new BigInteger(10);
BigInteger num = biNumber;
for (int i = 0; i < n - iScale; i++)
num *= ten;
Expand Down Expand Up @@ -491,8 +491,7 @@ public byte[] ToBytes()
}
public byte[] ToBytes(int scale)
{
this.setScale(scale);
return this.ToBytes();
return this.setScale(scale).ToBytes();
}
}
}
2 changes: 1 addition & 1 deletion VoltDB.Data.Client/Types/ThirdParty.BigInteger.cs
Expand Up @@ -167,7 +167,7 @@ public class BigInteger
1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999 };


private uint[] data = null; // stores bytes from the Big Integer
private readonly uint[] data = null; // stores bytes from the Big Integer
public int dataLength; // number of actual chars used


Expand Down
21 changes: 7 additions & 14 deletions VoltDB.Data.Client/Types/VoltDecimal.cs
Expand Up @@ -117,8 +117,7 @@ public byte[] ToBytes()
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(BigDecimal num)
{
this.Value = num;
this.Value.setScale(FixedScale);
this.Value = num.setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -128,8 +127,7 @@ public VoltDecimal(BigDecimal num)
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(long num)
{
this.Value = new BigDecimal(num);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -139,8 +137,7 @@ public VoltDecimal(long num)
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(ulong num)
{
this.Value = new BigDecimal(num);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -150,8 +147,7 @@ public VoltDecimal(ulong num)
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(double num)
{
this.Value = new BigDecimal(num);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -161,8 +157,7 @@ public VoltDecimal(double num)
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(BigInteger num)
{
this.Value = new BigDecimal(num);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -173,8 +168,7 @@ public VoltDecimal(BigInteger num)
/// <param name="scale">Scale of the decimal value to create.</param>
public VoltDecimal(BigInteger num, int scale)
{
this.Value = new BigDecimal(num, scale);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num, scale).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand All @@ -184,8 +178,7 @@ public VoltDecimal(BigInteger num, int scale)
/// <param name="num">Value used for initialization.</param>
public VoltDecimal(string num)
{
this.Value = new BigDecimal(num);
this.Value.setScale(FixedScale);
this.Value = new BigDecimal(num).setScale(FixedScale);
ValidOrThrow(this.Value);
}

Expand Down

0 comments on commit 8d88f26

Please sign in to comment.