我希望在进行比特币价值计算时避免任何精度误差。
1)在 C# 中,使用“decimal”是否是比特币货币的最佳选项?
2)在将字符串转换为数字时,是否需要注意任何精度误差?
谢谢。
我希望在进行比特币价值计算时避免任何精度误差。
1)在 C# 中,使用“decimal”是否是比特币货币的最佳选项?
2)在将字符串转换为数字时,是否需要注意任何精度误差?
谢谢。
虽然这与PHP有关,但仍然相关。建议使用Decimal值类型。
最后一个生成比特币的区块将是第6,929,999个区块,应在2140年左右生成。流通中的比特币总数将保持静态,为20,999,999.9769 BTC。即使扩展了当前8个小数的精度,流通中的总BTC也始终略低于2100万(假设其他所有内容保持不变)。例如,使用16位小数精度,最终总计将为20,999,999.999999999496 BTC。将字符串转换为Decimal并保持精度的示例:
var maxBtc = "20999999.999999999496";
var maxBtcDecimal = Decimal.Parse(maxBtc, NumberStyles.AllowDecimalPoint);
转换回去:
var maxBtcString = Convert.ToString(maxBtcDecimal);
简单的数学:
var oneBtc = new decimal(1.000000000000);
var newBtcValue = maxBtcDecimal - oneBtc;
十进制是目前最好的选择。
看看这个使用十进制表示比特币价值的工作中C#比特币库:https://github.com/GeorgeKimionis/BitcoinLib
需要注意的是,在C#中,十进制并不是固定浮点数,因此您需要配置您的O/RM或DB以保留正好8个小数点。
与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使得它非常适用于财务和货币计算。
如果您正在进行比特币金额的数学运算,应该使用Decimal。
Decimal.Parse()
应该使用 Decimal 将字符串转换为十进制。此外,请参阅其他 Stackoverflow 问题。