OptimisticConcurrencyException Does Not Work in Entity Framework In Certain Situations

Вот краткое изложение того, что вы можете использовать, если хотите получить результат в виде строки:

  1. DecimalFormat # setRoundingMode () :

    DecimalFormat df = new DecimalFormat("#.#####");
    df.setRoundingMode(RoundingMode.HALF_UP);
    String str1 = df.format(0.912385)); // 0.91239
    
  2. BigDecimal # setScale ()

    String str2 = new BigDecimal(0.912385)
        .setScale(5, BigDecimal.ROUND_HALF_UP)
        .toString();
    

Вот предложение о том, какие библиотеки вы можете использовать, если хотите double в следствии. Я бы не рекомендовал это для преобразования строк, так как double может быть не в состоянии точно представить, что вы хотите (см., Например, здесь ):

  1. Precision из Apache Commons Math

    double rounded = Precision.round(0.912385, 5, BigDecimal.ROUND_HALF_UP);
    
  2. Функции из Colt

    double rounded = Functions.round(0.00001).apply(0.912385)
    
  3. ] Утильс из Века

    double rounded = Utils.roundDouble(0.912385, 5)
    

21
задан Tomas Walek 29 April 2014 в 14:52
поделиться

1 ответ

Если сначала это код EF, используйте код, аналогичный приведенному ниже. Это изменит исходную метку времени, загруженную из дБ, на другую из пользовательского интерфейса и обеспечит выполнение OptimisticConcurrencyEception.

db.Entry(request).OriginalValues["Timestamp"] = TimeStamp;
3
ответ дан 29 November 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: