Wie verschicke ich Ether in Dezimalzahlen?

Angenommen, ich habe eine Funktion, die eine Dividende verschenkt, basierend darauf, wie viele Aktien dieser Kunde besitzt:

// Give away dividend based on how many balances of each customer has
function giveAwayDividend(uint _value) onlyOwner {
for(uint i=0;i<size();i++){
    //balances[customerAddress[i]] = balances[customerAddress[i]].add(balances[customerAddress[i]]*_value/totalSupply);
    //Transfer(msg.sender, customerAddress[i], (balances[customerAddress[i]] * _value / totalSupply) );
    customerAddress[i].send((balances[customerAddress[i]] * _value) / totalSupply);
   }
}

Das Problem ist, wie soll ich in der Lage sein, Ether in Dezimalzahlen zu senden? Wenn Kunde A 100 Coins hat, das Gesamtangebot 50000 Coins beträgt, der Gesamtbetrag der Dividende 10 Ether beträgt, sollte er 100/50000 * 10 = 0,02 Ether erhalten, aber hier denke ich, dass (balances[customerAddress[i]] * _value) / totalSupply ergeben wird ich 0?

Wie soll ich es beheben?

Antworten (1)

Wo genau ist Ihr Problem bei der Implementierung von 100/50000 * 10 = 0,02ETH? Salden werden standardmäßig in Wei behandelt, 1 Wei * 10^18 = 1ETH, also 0,02ETH == 20000000000000000 Wei, verwenden Sie diesen Einheitenumrechner .

Ich sehe darin ein grundlegenderes Problem: Wenn es customerAddress[i]lang wird, giveAwayDividendschlägt der Aufruf jedes Mal fehl, wenn ausgeführt wird out of gas.

Ups, ich habe gerade Wei angeschaut und Sie haben Recht, es gibt kein Problem mit meiner Frage. Was die zweite Frage betrifft, wie lange genau wird meine Funktion dadurch fehlschlagen? Da ich es nur vierteljährlich aufrufe, ist es in Ordnung, viermal im Jahr etwas Geld für diesen Funktionsaufruf zu zahlen, wenn es nur jedes Mal erfolgreich ausgeführt wird
Froh, dass ich helfen konnte. Zeit spielt hier keine Rolle, es ist die Höhe der Zahlungen. Ab einer bestimmten Anzahl von Adressen, die Sie auszahlen, wird der Gasbedarf zu hoch sein.
Sollte dieses " 100/50000 * 10 " "(10 * 100) / 50000" sein, weil kein Gleitkomma vorhanden ist? Ich denke, in diesem Fall spielt es keine Rolle, da das Ergebnis von 100/50000 eine ganze Zahl ist, sondern nur neugierig.
Vermeiden Sie immer Fließkommasituationen und schreiben Sie Zahlen als Multiplikation mit einem Faktor, der einen Exponentialwert hat, so vermeiden Sie Fehler. B. ETH mit wei berechnen, schreiben Sie 1 * 10^18 statt 1000000000000000000.