为什么我的数学不对

Why isn't my math right

我正在尝试制作一个简单的工具,您可以在其中跟踪您对 BTC 的投资。我拥有计算所有内容所需的所有数据,但当涉及到汇率变化时,我的 "investment total" 没有变化。这意味着当 BTC 上涨时,我赚了多少钱的结果几乎保持不变,而当它下跌时也一样。

我已经发布了我的代码并尝试了很多不同的解决方案,包括不同的类型:浮点数、小数、整数、双精度,结果总是一样的。我错过了什么?

编辑 - 代码:

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);
        }
    }
}

核心Class:

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;
        }
    }
}

不清楚为什么您希望这段代码有不同的行为。看看这些行:

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

如果我内联 USDtoBTC 并内联所有内容以计算 AmountAtMarket,则公式将是

AmountAtMarket  = (15000 / ExchangeRate) * ExchangeRate

所以你得到的 15000 应该总是有一些舍入误差。

错误似乎在您计算 AmountInBTC 的那一行。要计算 AmountInBTC,您应该将您的投资金额(我假设 15000)除以您进行投资时的汇率 而不是当前汇率。