【发布时间】:2021-09-23 04:12:19
【问题描述】:
我有实体:
data class DropsDeposit(
val userId: Int,
val articleId: Int,
val quantity: BigDecimal
)
我的问题是 quantity 字段类型。我使用的是双精度类型,但在这种情况下,我在转换为浮点数时遇到了问题。
所以,a 使用了 BigDecimal,我的问题就消失了。
不幸的是,现在是另一个问题。当我尝试获取该值时,我只得到 6 位数字。 我还有用于从 String 到 BigDecimal 的自定义转换的类型转换器
class BigDecimalTypeConverter {
@TypeConverter
fun toBigDecimal(number: String): BigDecimal {
Timber.e("BigDecimalTypeConverter numberStr: $number")
return BigDecimal(number, MathContext.UNLIMITED)
}
@TypeConverter
fun fromBigDecimal(number: BigDecimal): String {
return number.toPlainString()
}
}
例如
当列数有444.1234567值时,对象值对应的值为444.123
当列数量有0.0004567值时,对象值对应的值为0.0004567
Timber 的日志显示从数据库中获取的值是错误的(就像上面的示例一样)
我想将字段的亲和力设置为 NUMERIC
@ColumnInfo(typeAffinity = ColumnInfo.NUMERIC)
但此亲和类型不可用。
有什么办法解决吗?
【问题讨论】:
-
数量的最大尺寸是多少?
-
@Karol 可能是因为您在类型转换器中使用了 toPlainString() 如果您只使用 toString() 怎么样?
-
@ChinthakaDevinda 问题是从数据库读取而不是转换。
number错了 -
@Eishon 它没有定义,但我认为它大约是 10000。但更重要的是保持正确的转换,所以 double/float 不是正确的解决方案
-
数量描述了医院的药物剂量,而to通常是一个分数
标签: android sqlite android-sqlite android-room