使用Realm.io存储货币价值

MrW*_*d54 6 java android realm

我正在开始在我正在编写的Android应用程序中使用Realm.io.在我的一个数据对象中,我需要存储货币值.以前我在内部将值存储为BigDecimal值,然后在进出数据库时将值转换为double值.

我一直被告知,由于处理它们的方式,将货币值存储在double中是个坏主意.不幸的是,Realm.io不支持存储和检索BigDecimal对象.

编写我自己的扩展RealmObject的货币类并将其作为数据对象的成员变量保留的最佳解决方案是什么?

Ema*_*lez 6

来自Realm的Emanuele在这里.

你是对的,使用花车或双人币作为货币是一个主意.

我们现在不支持BigDecimal,在我们开始之前,我们必须看看它与所有其他语言绑定的关系,因为我们希望realm文件在所有支持的平台上兼容.

克里斯蒂安的想法很好,但我看到转换为String的转换有点慢.如果您不需要BigDecimal的任意精度属性,则可以使用long并乘以/除以所需精度所需的因子.由于整数值是有点打包的,因此这也会在Realm文件的大小方面节省大量空间.


Chr*_*ior 5

这可能会起作用,但如果对当前的BigDecimal对象进行计算,则可能不是最理想的.

您还可以使用@Ignore批注为自定义对象提供包装方法,如下所示:

public class Money extends RealmObject {

  private String dbValue;
  @Ignore private BigDecimal value;

  public String getDbValue() {
      return dbValue;
  }

  public void setDbValue(String dbValue) {
      this.dbValue = dbValue;
  }

  public BigDecimal getValue() {
     return new BigDecimal(getDbValue());
  }

  public void setValue(BigDecimal value) {
      setDbValue(value.toString());
  }
}
Run Code Online (Sandbox Code Playgroud)

它不完美,因为你需要公开*dbValue()方法,但它应该工作.

我还建议去https://github.com/realm/realm-java/issues并为此发出一个功能请求,因为BigDecimal可能是许多人使用的java类之一,它可以保证本机Realm支持,只是就像Date一样.