2017-12-12 12 views
-7

私はあなたのBTCへの投資を追跡できる簡単なツールを作ろうとしています。私はすべてのデータをすべて計算する必要がありますが、交換価格になると「投資総額」が変わることはありません。 BTCが上がったときの意味は、自分がどれだけの金を出したかという結果は、それが落ち込んだときにほぼ同じままです。なぜ私の数学が正しくないのですか

私は自分のコードを投稿し、浮動小数点数、小数点以下の桁数、int型、倍精度型など、さまざまなソリューションを試しました。私は何が欠けていますか?

enter image description here

EDIT - CODE:

namespace BTC_Profit_Projections 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 

     } 
     Core c = new Core(); 

     private void button1_Click(object sender, EventArgs e) 
     { 
      timer1.Enabled = true; 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      var ExchangeRate = c.GrabBTCAmount(); 
      var AmountInBTC = (c.USDtoBTC(15000, ExchangeRate)); 
      var AmountAtMarket = (AmountInBTC * ExchangeRate); 

      ListViewItem i = new ListViewItem("15000"); 
      i.SubItems.Add(AmountInBTC.ToString()); 
      i.SubItems.Add(AmountAtMarket.ToString()); 
      i.SubItems.Add(ExchangeRate.ToString()); 
      mainlist.Items.Add(i); 
     } 
    } 
} 

コアクラス:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Text; 
using System.Threading.Tasks; 

namespace BTC_Profit_Projections 
{ 
    class Core 
    { 

     public decimal GrabBTCAmount() 
     { 
      WebClient w = new WebClient(); 
      string btc = w.DownloadString("https://www.bitstamp.net/api/ticker/"); 

      int pos1 = btc.IndexOf("last", 0); 
      int pos2 = btc.IndexOf(":", pos1); 
      int pos3 = btc.IndexOf(",", pos2); 

      return Convert.ToDecimal(btc.Substring(pos2 + 3, pos3 - pos2 - 4)); 

     } 

     public decimal USDtoBTC(decimal money, decimal rate) 
     { 
      return money/rate; 
     } 
    } 
} 
+0

それは私に見えます。間違った価値がどこにあるのかを強調できますか? –

+3

コードの写真を掲載しないでください - 実際のコードを貼り付けてください。そしてこれは 'webrequest'と何が関係していますか? – Plutonix

+0

[コードサンプルの画像で下降しました](http://idownvotedbecau.se/imageofcode)イメージの代わりに実際のテキストとしてコードを貼り付け、[mcve]を含めます。 –

答えて

2

あなたはこのコードが異なる動作をすることを期待する理由は明らかではありません。これらの行を見てください:

 var ExchangeRate = c.GrabBTCAmount(); 
     var AmountInBTC = (c.USDtoBTC(15000, ExchangeRate)); 
     var AmountAtMarket = (AmountInBTC * ExchangeRate); 

私はUSDtoBTCをインライン式が

AmountAtMarket = (15000/ExchangeRate) * ExchangeRate 

だろうAmountAtMarketを計算するために、すべてをインライン化した場合ので、あなたは常にいくつかの丸め誤差と15000を取得する必要があります。

AmountInBTCを計算する行にバグがあるようです。 AmountInBTCを計算するには、現在の為替レートではなく、の投資を行った瞬間に、換算レートで投資合計額(私は15000とする)を割ります。

+0

これをさらに展開できますか? – Frank

+0

@Frank、あなたに不明な点についてさらに詳しく説明しない限り、私はできるとは限りません。数学的に、あなたが 'AmountAtMarket'として計算したものは単なる定数「15000」です。浮動小数点数の実装方法には限界があるため、正確な値は得られませんが、丸め誤差もあります。私はあなたが単一の投資をしたことは間違いありませんか?もしそうなら、それは現実の世界ではAmountInBTCは単なる定数値であり、 'ExchangeRate'が変動しても変化しないことを意味します。投資額の合計を投資の日/時間の為替レートで割ることによって、その価値を計算する必要があります。 – SergGr

+0

これは '(15000 * AmountInBTC)/為替レート'ですか? – Frank

関連する問題