首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比特币编号格式

比特币编号格式
EN

Stack Overflow用户
提问于 2014-02-27 18:10:47
回答 3查看 3.7K关注 0票数 4

我想避免任何精确的错误时,做数学比特币的价值。

1)“十进制”是C#中比特币使用的最佳选择吗?

( 2)当从字符串转换为数字时,是否有任何精度错误需要我注意?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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。

将字符串转换为十进制并保持精度的示例:

代码语言:javascript
复制
var maxBtc = "20999999.999999999496";
var maxBtcDecimal = Decimal.Parse(maxBtc, NumberStyles.AllowDecimalPoint);

转换回:

代码语言:javascript
复制
var maxBtcString = Convert.ToString(maxBtcDecimal);

简单的数学:

代码语言:javascript
复制
var oneBtc = new decimal(1.000000000000);
var newBtcValue = maxBtcDecimal - oneBtc;
票数 4
EN

Stack Overflow用户

发布于 2014-03-06 14:36:09

十进制是可用的最佳选项。

看看这个正在工作的C#比特币库,它将十进制用于比特币值:https://github.com/GeorgeKimionis/BitcoinLib

您需要注意,在C#中,十进制不是固定浮动的,所以您需要配置您的O/RM或DB,以保持精确的小数点。

票数 1
EN

Stack Overflow用户

发布于 2014-02-27 18:15:10

来自MSDN

与浮点类型相比,十进制类型具有更高的精度和更小的范围,这使得它适合于金融和货币计算。

如果你在对比特币的数量做数学运算,你应该使用十进制。

代码语言:javascript
复制
Decimal.Parse()

应该用于从字符串转换为十进制。也请参阅此其他堆叠溢出问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22076838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档