@@ -38,22 +38,28 @@ extension UInt64 {
38
38
if self == 0 {
39
39
return " 0.00 000 000 "
40
40
} else {
41
- let balanceString = String ( format: " %010d " , self )
42
-
43
- let zero = balanceString. prefix ( 2 )
44
- let first = balanceString. dropFirst ( 2 ) . prefix ( 2 )
45
- let second = balanceString. dropFirst ( 4 ) . prefix ( 3 )
46
- let third = balanceString. dropFirst ( 7 ) . prefix ( 3 )
47
-
48
- var formattedZero = zero
49
-
50
- if zero == " 00 " {
51
- formattedZero = zero. dropFirst ( )
52
- } else if zero. hasPrefix ( " 0 " ) {
53
- formattedZero = zero. suffix ( 1 )
54
- }
55
-
56
- let formattedBalance = " \( formattedZero) . \( first) \( second) \( third) "
41
+ // Convert satoshis to BTC (1 BTC = 100,000,000 sats)
42
+ let btcValue = Double ( self ) / 100_000_000.0
43
+
44
+ // Format BTC value to exactly 8 decimal places
45
+ let btcString = String ( format: " %.8f " , btcValue)
46
+
47
+ // Split the string at the decimal point
48
+ let parts = btcString. split ( separator: " . " )
49
+ guard parts. count == 2 else { return btcString }
50
+
51
+ let wholePart = String ( parts [ 0 ] )
52
+ let decimalPart = String ( parts [ 1 ] )
53
+
54
+ // Ensure decimal part is exactly 8 digits
55
+ let paddedDecimal = decimalPart. padding ( toLength: 8 , withPad: " 0 " , startingAt: 0 )
56
+
57
+ // Format as XX.XX XXX XXX
58
+ let first = paddedDecimal. prefix ( 2 )
59
+ let second = paddedDecimal. dropFirst ( 2 ) . prefix ( 3 )
60
+ let third = paddedDecimal. dropFirst ( 5 ) . prefix ( 3 )
61
+
62
+ let formattedBalance = " \( wholePart) . \( first) \( second) \( third) "
57
63
58
64
return formattedBalance
59
65
}
0 commit comments