代码之家  ›  专栏  ›  技术社区  ›  Fabio Milheiro

Azure存储-保存时忽略双小数点

  •  1
  • Fabio Milheiro  · 技术社区  · 14 年前

    我有一个正确存储在对象属性中的值,但是当我将更改保存到Azure存储数据库时,双精度值将忽略该点存储到数据库中(7.11000000003保存为711)。此外,属性也更改为711.0。

    如何解决这个问题?

    4 回复  |  直到 14 年前
        1
  •  2
  •   GBU    14 年前

    此问题似乎是由于开发人员存储使用的区域性设置造成的。如果查看Dev Storage db中的TableRow表,则数据存储为XML,十进制值使用点作为十进制分隔符。在巴西,点是千位分隔符。我直接在Dev Storage db中编辑了数据,将点改为逗号(PT-BR十进制分隔符),读取的值是ok。这很奇怪,因为如果在使用PT-BR十进制分隔符时读取的值是ok,那么Dev存储似乎正在使用我当前的区域性设置。但是为什么不应用文化来保存数据呢?

    PS:将windows区域设置更改为EN-US解决了问题。我想这就是为什么这是我唯一能找到的关于它的帖子。

        2
  •  3
  •   David Makogon    14 年前

    double值是在它自己的字段中,还是在partitionkey或rowkey字段中?PartitionKey和RowKey总是字符串。

    public class SmsMessage: TableServiceEntity
    {
        public double MyDouble { get; set; }
        public SmsMessage(string destination, string message, double myDouble)
        {
            PartitionKey = destination;
            RowKey = message;
            MyDouble = myDouble;
        }
        public SmsMessage()
            : base("", string.Format("{0:d10}", DateTime.Now.Ticks))
        {
        }
    }
    

    smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
    smsTable.SaveChanges();
    

    我在表存储资源管理器中查看它,我的双精度是我输入它们的方式(例如1.2345)。

    var results = from m in smsTable.SmsMessages
                          where m.PartitionKey.Equals(txtDestination.Text.Trim())
                          select m;
    

    我的double值都被保留并强类型化为double。

        3
  •  1
  •   user94559    14 年前

    (可能在本地SQL支持的存储中,值以科学记数法存储?)

        4
  •  0
  •   Fabio Milheiro    14 年前