如何将 C# BigInteger 转换为 MySQL DECIMAL(36,18)?
Posted
技术标签:
【中文标题】如何将 C# BigInteger 转换为 MySQL DECIMAL(36,18)?【英文标题】:How do I convert a C# BigInteger into a MySQL DECIMAL(36,18)? 【发布时间】:2021-12-10 07:06:05 【问题描述】:我正在尝试将 BigInteger 存储为 C# 中的 DECIMAL(36,18)。 当我尝试添加这样的值时:
public void AddTrade(BigInteger price)
_connection.Open();
var command = new mysqlCommand(@"INSERT INTO Prices (Price) VALUES (@Price);", _connection);
command.Parameters.Add("@Price", MySqlDbType.Decimal).Value = price;
command.ExecuteNonQuery();
_connection.Close();
我得到以下异常:
System.NotSupportedException: 'Parameter type BigInteger is not supported;
这是我创建表格的方式:
public void CreatePriceTable()
_connection.Open();
var createTable = new MySqlCommand(
@"
CREATE TABLE `Prices` (
Price DECIMAL(36,18) NOT NULL,
) COLLATE='utf8_general_ci' ENGINE=InnoDB;"
, _connection);
createTable.ExecuteNonQuery();
_connection.Close();
我无法在任何文档中找到解决方案,希望有人可以帮助我。谢谢!
编辑: 我需要使用 BigInteger 的原因是因为我收到了一个以 Wei(以太坊区块链上的最小单位)为 BigInteger 的价格。一个以太币是 1000000000000000000 Wei。其他posts 建议为 Wei 使用 DECIMAL(36,18)。
【问题讨论】:
你可以直接将价格转换成双倍 这能回答你的问题吗? Fastest way to convert a BigInteger to a decimal (Base 10) string? 它很可能期望 C# 'decimal' 类型用于“DECIMAL”类型的列。不是BigInteger
。 BigInteger 具有无限精度,一般情况下无论如何都不能存储在“DECIMAL”列中。
BigInteger 在 c# 中不存在,因为数据类型将它向下转换为 int32。但我不明白你为什么要将整数转换为小数
DECIMAL(36,0)
可能更有意义
【参考方案1】:
解决方案比预期的要简单得多。调用 ToString() 就可以了:
public void AddTrade(BigInteger price)
_connection.Open();
var command = new MySqlCommand(@"INSERT INTO Prices (Price) VALUES (@Price);", _connection);
command.Parameters.Add("@Price", MySqlDbType.Decimal).Value = price.ToString();
command.ExecuteNonQuery();
_connection.Close();
【讨论】:
除非你有十进制列,这意味着你的意图是存储小数值(ETH)并且你在那里写整数(Wei)。 你可以转换成小数Value = (decimal)price
@Evk 好点。我将其更改为 DECIMAL(36,0)以上是关于如何将 C# BigInteger 转换为 MySQL DECIMAL(36,18)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中将语言环境格式的数字转换为 BigInteger?
java中BigDecimal和bigInteger如何转换
如何从 Java 中的 BigInteger 获取无符号字节数组?
JOOQ 强制类型将 BigInteger 转换为 BigDecimal 以用于 POSTGRES
graphene-django 将 models.BigInteger() 转换为 graphene.Integer()