オブジェクトのプロパティに正しく格納されている値がありますが、変更をAzureストレージデータベースに保存すると、そのポイントを無視してdouble値がデータベースに格納されます(7.11000000003は711として保存されます)。また、プロパティは711.0に変更されます。
この問題を解決するにはどうすればよいですか?
このフィールドは、クラスとデータベーステーブルですでにdoubleに設定されています。
オブジェクトのプロパティに正しく格納されている値がありますが、変更をAzureストレージデータベースに保存すると、そのポイントを無視してdouble値がデータベースに格納されます(7.11000000003は711として保存されます)。また、プロパティは711.0に変更されます。
この問題を解決するにはどうすればよいですか?
このフィールドは、クラスとデータベーステーブルですでにdoubleに設定されています。
あなたのdouble値はそれ自身のフィールドにありますか、それともpartitionkeyまたはrowkeyフィールドにありますか?PartitionKeyとRowKeyは常に文字列です。
二重フィールドを持つ行を読み書きする簡単なテストを作成したところ、値は問題なく保持されます。msdev.comトレーニングを介してBillLodinのSMSコードからサンプルSmsMessageクラスを変更しました(int Delayフィールドを取得し、floatに変更し、明確にするためにMyDoubleに名前を変更しました)。
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))
{
}
}
次に、SmsMessageTableに書き込みます。
smsTable.AddObject("SmsMessages", new SmsMessage(destination, message, myDouble));
smsTable.SaveChanges();
私はこれをテーブルストレージエクスプローラーで表示し、ダブルスは私がそれらを入力した方法です(例:1.2345)。
次に、パーティションキー内の特定のユーザー名に対して、単純なlinqクエリを使用して取得します。
var results = from m in smsTable.SmsMessages
where m.PartitionKey.Equals(txtDestination.Text.Trim())
select m;
私のdouble値はすべて保持され、doubleとして強く型付けされます。
この問題は、DevStorageが使用しているカルチャ設定が原因のようです。Dev Storageデータベース内のTableRowテーブルを見ると、データはXMLとして格納されており、10進値は小数点としてドットを使用しています。ここブラジルでは、ドットは千単位の区切り文字です。Dev Storageデータベースでデータを直接編集し、ドットをコンマ(PT-BR小数点記号)に変更したところ、値は正常に読み取られました。奇妙なことに、PT-BR小数点記号を使用したときに値が正常に読み取られた場合、DevStorageは現在のカルチャ設定を使用しているようです。しかし、なぜ文化がデータの保存に適用されないのでしょうか。
PS:WindowsロケールをEN-USに変更すると、問題が解決しました。それが私がそれについて見つけることができた唯一の投稿である理由だと思います。
値をどのようにチェックしていますか?ローカル開発ストレージは内部でSQLExpressを使用しているため、SQLを開いてその周りを突っついている可能性があります。私はそれを避け、代わりに.NETストレージクライアントライブラリを使用して値を読み戻します。値が正しく戻ってくると思います。
(おそらくローカルのSQLに裏打ちされたストアに、値は科学的記数法で格納されますか?)
私は努力に感謝し、おそらく私は事件を十分に明らかにしなかったが、これのどれも私の質問に本当に答えていない。この答えは、バウンティを不当に帰することではありません。バウンティは、2以上の賛成票を持つベストアンサーに自動的に帰属されるべきではありません。