Saving high precision decimal numbers to SQlite
This commit is contained in:
parent
6d8bf44077
commit
9ef6358089
35
DBClasses.cs
35
DBClasses.cs
|
@ -72,10 +72,12 @@ namespace CryptoCalc
|
||||||
|
|
||||||
public long WalletID { get; set; }
|
public long WalletID { get; set; }
|
||||||
public string Currency { get; set; }
|
public string Currency { get; set; }
|
||||||
public string Amount { get; set; }
|
public long Amount { get; set; }
|
||||||
|
public ulong AmountDecimal { get; set; }
|
||||||
public string TransactionType { get; set; }
|
public string TransactionType { get; set; }
|
||||||
public string FeeCurrency { get; set; }
|
public string FeeCurrency { get; set; }
|
||||||
public string FeeAmount { get; set; }
|
public long FeeAmount { get; set; }
|
||||||
|
public ulong FeeAmountDecimal { get; set; }
|
||||||
public string Platform { get; set; }
|
public string Platform { get; set; }
|
||||||
public string Note { get; set; }
|
public string Note { get; set; }
|
||||||
|
|
||||||
|
@ -85,12 +87,12 @@ namespace CryptoCalc
|
||||||
|
|
||||||
public Transaction() { SetDBStrings(); }
|
public Transaction() { SetDBStrings(); }
|
||||||
|
|
||||||
public Transaction(long walletID, string currency, string amount, string type)
|
public Transaction(long walletID, string currency, decimal amount, string type)
|
||||||
{
|
{
|
||||||
SaveUnixTimeNow();
|
SaveUnixTimeNow();
|
||||||
WalletID = walletID;
|
WalletID = walletID;
|
||||||
Currency = currency;
|
Currency = currency;
|
||||||
Amount = amount;
|
(Amount, AmountDecimal) = Util.SplitDecimal(amount);
|
||||||
TransactionType = type;
|
TransactionType = type;
|
||||||
|
|
||||||
Platform = "";
|
Platform = "";
|
||||||
|
@ -99,14 +101,14 @@ namespace CryptoCalc
|
||||||
SetDBStrings();
|
SetDBStrings();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Transaction(string currency, string amount, string type, string feeCurrency, string feeAmount)
|
public Transaction(string currency, decimal amount, string type, string feeCurrency, decimal feeAmount)
|
||||||
{
|
{
|
||||||
SaveUnixTimeNow();
|
SaveUnixTimeNow();
|
||||||
Currency = currency;
|
Currency = currency;
|
||||||
Amount = amount.ToString(CultureInfo.InvariantCulture);
|
(Amount, AmountDecimal) = Util.SplitDecimal(amount);
|
||||||
TransactionType = type;
|
TransactionType = type;
|
||||||
FeeCurrency = feeCurrency;
|
FeeCurrency = feeCurrency;
|
||||||
FeeAmount = feeAmount.ToString(CultureInfo.InvariantCulture);
|
(FeeAmount, FeeAmountDecimal) = Util.SplitDecimal(feeAmount);
|
||||||
Platform = "";
|
Platform = "";
|
||||||
Note = "";
|
Note = "";
|
||||||
|
|
||||||
|
@ -124,14 +126,16 @@ namespace CryptoCalc
|
||||||
+ $"@{nameof(UnixTime)},"
|
+ $"@{nameof(UnixTime)},"
|
||||||
+ $"@{nameof(Currency)},"
|
+ $"@{nameof(Currency)},"
|
||||||
+ $"@{nameof(Amount)},"
|
+ $"@{nameof(Amount)},"
|
||||||
|
+ $"@{nameof(AmountDecimal)},"
|
||||||
+ $"@{nameof(TransactionType)},"
|
+ $"@{nameof(TransactionType)},"
|
||||||
+ $"@{nameof(FeeCurrency)},"
|
+ $"@{nameof(FeeCurrency)},"
|
||||||
+ $"@{nameof(FeeAmount)},"
|
+ $"@{nameof(FeeAmount)},"
|
||||||
|
+ $"@{nameof(FeeAmountDecimal)},"
|
||||||
+ $"@{nameof(Platform)},"
|
+ $"@{nameof(Platform)},"
|
||||||
+ $"@{nameof(Note)}";
|
+ $"@{nameof(Note)}";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { decimal.Parse(Amount, CultureInfo.InvariantCulture) } { TransactionType }";
|
public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { Util.CombineDecimal(Amount, AmountDecimal) } { TransactionType }";
|
||||||
|
|
||||||
public string CreateTable(string walletTableName)
|
public string CreateTable(string walletTableName)
|
||||||
{
|
{
|
||||||
|
@ -141,10 +145,12 @@ namespace CryptoCalc
|
||||||
+ $"\"{nameof(WalletID)}\" INTEGER NOT NULL,"
|
+ $"\"{nameof(WalletID)}\" INTEGER NOT NULL,"
|
||||||
+ $"\"{nameof(UnixTime)}\" INTEGER NOT NULL,"
|
+ $"\"{nameof(UnixTime)}\" INTEGER NOT NULL,"
|
||||||
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
||||||
+ $"\"{nameof(Amount)}\" TEXT NOT NULL,"
|
+ $"\"{nameof(Amount)}\" INTEGER NOT NULL,"
|
||||||
|
+ $"\"{nameof(AmountDecimal)}\" INTEGER NOT NULL,"
|
||||||
+ $"\"{nameof(TransactionType)}\" TEXT NOT NULL,"
|
+ $"\"{nameof(TransactionType)}\" TEXT NOT NULL,"
|
||||||
+ $"\"{nameof(FeeCurrency)}\" TEXT,"
|
+ $"\"{nameof(FeeCurrency)}\" TEXT,"
|
||||||
+ $"\"{nameof(FeeAmount)}\" TEXT,"
|
+ $"\"{nameof(FeeAmount)}\" INTEGER,"
|
||||||
|
+ $"\"{nameof(FeeAmountDecimal)}\" INTEGER,"
|
||||||
+ $"\"{nameof(Platform)}\" TEXT,"
|
+ $"\"{nameof(Platform)}\" TEXT,"
|
||||||
+ $"\"{nameof(Note)}\" TEXT,"
|
+ $"\"{nameof(Note)}\" TEXT,"
|
||||||
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT),"
|
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT),"
|
||||||
|
@ -166,7 +172,8 @@ namespace CryptoCalc
|
||||||
public string Platform { get; set; }
|
public string Platform { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public string Currency { get; set; }
|
public string Currency { get; set; }
|
||||||
public ulong Balance { get; set; }
|
public long Balance { get; set; }
|
||||||
|
public ulong BalanceDecimal { get; set; }
|
||||||
public int DefaultWallet { get; set; }
|
public int DefaultWallet { get; set; }
|
||||||
public string Note { get; set; }
|
public string Note { get; set; }
|
||||||
|
|
||||||
|
@ -183,7 +190,7 @@ namespace CryptoCalc
|
||||||
Platform = platform;
|
Platform = platform;
|
||||||
Name = name;
|
Name = name;
|
||||||
Currency = currency;
|
Currency = currency;
|
||||||
Balance = Util.ConvToLong(0M);
|
(Balance, BalanceDecimal) = Util.SplitDecimal(0);
|
||||||
DefaultWallet = 0;
|
DefaultWallet = 0;
|
||||||
Note = note;
|
Note = note;
|
||||||
|
|
||||||
|
@ -203,6 +210,7 @@ namespace CryptoCalc
|
||||||
+ $"@{nameof(Name)},"
|
+ $"@{nameof(Name)},"
|
||||||
+ $"@{nameof(Currency)},"
|
+ $"@{nameof(Currency)},"
|
||||||
+ $"@{nameof(Balance)},"
|
+ $"@{nameof(Balance)},"
|
||||||
|
+ $"@{nameof(BalanceDecimal)},"
|
||||||
+ $"@{nameof(DefaultWallet)},"
|
+ $"@{nameof(DefaultWallet)},"
|
||||||
+ $"@{nameof(Note)}";
|
+ $"@{nameof(Note)}";
|
||||||
}
|
}
|
||||||
|
@ -219,7 +227,8 @@ namespace CryptoCalc
|
||||||
+ $"\"{nameof(Platform)}\" TEXT,"
|
+ $"\"{nameof(Platform)}\" TEXT,"
|
||||||
+ $"\"{nameof(Name)}\" TEXT,"
|
+ $"\"{nameof(Name)}\" TEXT,"
|
||||||
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
|
||||||
+ $"\"{nameof(Balance)}\" TEXT NOT NULL,"
|
+ $"\"{nameof(Balance)}\" INTEGER NOT NULL,"
|
||||||
|
+ $"\"{nameof(BalanceDecimal)}\" INTEGER NOT NULL,"
|
||||||
+ $"\"{nameof(DefaultWallet)}\" INTEGER,"
|
+ $"\"{nameof(DefaultWallet)}\" INTEGER,"
|
||||||
+ $"\"{nameof(Note)}\" TEXT,"
|
+ $"\"{nameof(Note)}\" TEXT,"
|
||||||
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)"
|
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ namespace CryptoCalc
|
||||||
new Transaction(
|
new Transaction(
|
||||||
selectedWallet.Index,
|
selectedWallet.Index,
|
||||||
inputCurrency.Text,
|
inputCurrency.Text,
|
||||||
inputAmount.Text,
|
Convert.ToDecimal(inputAmount.Text, CultureInfo.InvariantCulture),
|
||||||
inputType.Text
|
inputType.Text
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -110,7 +111,7 @@ namespace CryptoCalc
|
||||||
t.WalletID = selectedWallet.Index;
|
t.WalletID = selectedWallet.Index;
|
||||||
t.SaveUnixTimeNow();
|
t.SaveUnixTimeNow();
|
||||||
t.Currency = "SOL";
|
t.Currency = "SOL";
|
||||||
t.Amount = (30m * (decimal)rand.NextDouble()).ToString();
|
(t.Amount, t.AmountDecimal) = Util.SplitDecimal(Convert.ToDecimal(30m * (decimal)rand.NextDouble()));
|
||||||
t.TransactionType = "BUY";
|
t.TransactionType = "BUY";
|
||||||
t.Platform = "Firi";
|
t.Platform = "Firi";
|
||||||
t.Note = "Test";
|
t.Note = "Test";
|
||||||
|
@ -125,7 +126,7 @@ namespace CryptoCalc
|
||||||
w.Platform = "Ledger";
|
w.Platform = "Ledger";
|
||||||
w.Name = "DefaultBTCWallet";
|
w.Name = "DefaultBTCWallet";
|
||||||
w.Currency = "BTC";
|
w.Currency = "BTC";
|
||||||
w.Balance = Util.ConvToLong(0);//Convert.ToSingle(30 * rand.NextDouble());
|
w.Balance = 0;//Convert.ToSingle(30 * rand.NextDouble());
|
||||||
w.DefaultWallet = 1;
|
w.DefaultWallet = 1;
|
||||||
w.Note = "Main BTC Wallet";
|
w.Note = "Main BTC Wallet";
|
||||||
return w;
|
return w;
|
||||||
|
@ -134,8 +135,8 @@ namespace CryptoCalc
|
||||||
|
|
||||||
private void inputAmount_LostFocus(object sender, RoutedEventArgs e)
|
private void inputAmount_LostFocus(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
inputAmount.Text = inputAmount.Text.Replace(".", ",");
|
//inputAmount.Text = inputAmount.Text.Replace(".", ",");
|
||||||
//inputAmount.Text = inputAmount.Text.Replace(",", ".");
|
inputAmount.Text = inputAmount.Text.Replace(",", ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void currencyText_LostFocus(object sender, RoutedEventArgs e)
|
private void currencyText_LostFocus(object sender, RoutedEventArgs e)
|
||||||
|
|
22
Util.cs
22
Util.cs
|
@ -4,21 +4,33 @@ namespace CryptoCalc
|
||||||
{
|
{
|
||||||
public class Util
|
public class Util
|
||||||
{
|
{
|
||||||
|
private static readonly decimal lowestUnit = 1e18m;
|
||||||
|
|
||||||
public static string GetConnectionString(string name = "Default")
|
public static string GetConnectionString(string name = "Default")
|
||||||
{
|
{
|
||||||
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
|
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ulong ConvToLong(decimal value)
|
public static ulong ConvToULong(decimal value)
|
||||||
{
|
{
|
||||||
//return decimal.ToInt64(value * 1e18M);
|
return decimal.ToUInt64(value * lowestUnit);
|
||||||
return decimal.ToUInt64(value * 1e18M);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static decimal ConveToDecimal (ulong value)
|
public static decimal ConvToDecimal(ulong value)
|
||||||
{
|
{
|
||||||
return value * 1e-18M;
|
return value / lowestUnit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static (long wholeNumber, ulong fractionNumber) SplitDecimal(decimal value)
|
||||||
|
{
|
||||||
|
long w = (long)value;
|
||||||
|
ulong f = ConvToULong((value % 1));
|
||||||
|
return (w, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static decimal CombineDecimal(long amount, ulong amountDecimal)
|
||||||
|
{
|
||||||
|
return amount + ConvToDecimal(amountDecimal);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue