我想避免任何精确的错误时,做数学比特币的价值。
1)“十进制”是C#中比特币使用的最佳选择吗?
( 2)当从字符串转换为数字时,是否有任何精度错误需要我注意?
谢谢
发布于 2014-02-27 18:23:01
比特币的数量可以从1比特币(0.00000001比特币)到近2,100,000,000,000比特币(21,000,000比特币)不等。为了避免舍入错误,您必须确保PHP实现支持所有范围的比特币值,而不丢失精度。大多数PHP实现使用IEEE 64位双精度浮点数和53位精度,这足以正确地表示所有的比特币值。
尽管这与PHP相关,但它仍然是相关的。按照建议,您应该使用Decimal值类型。
将产生硬币的最后一块将是第6,929,999块,该区块应在2140年或附近产生。流通中的硬币总数将保持不变,为20,999,999.9769比特币。即使允许的精度从目前的8小数点扩大,流通中的BTC总量总是略低于2100万(假设其他一切保持不变)。例如,有16个小数的精度,最终总数将是20,999,999.99999999999496 BTC。
将字符串转换为十进制并保持精度的示例:
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;发布于 2014-03-06 14:36:09
十进制是可用的最佳选项。
看看这个正在工作的C#比特币库,它将十进制用于比特币值:https://github.com/GeorgeKimionis/BitcoinLib
您需要注意,在C#中,十进制不是固定浮动的,所以您需要配置您的O/RM或DB,以保持精确的小数点。
发布于 2014-02-27 18:15:10
来自MSDN
与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使得它适合于金融和货币计算。
如果你在对比特币的数量做数学运算,你应该使用十进制。
Decimal.Parse()应该用于从字符串转换为十进制。也请参阅此其他堆叠溢出问题
https://stackoverflow.com/questions/22076838
复制相似问题