Форматирование дважды как строка в C#

Событие изменения вызывается, когда значение изменяется при взаимодействии пользователей на странице, а не при изменении значения с использованием кода.

Здесь вам нужно использовать .change() или .trigger("change") после изменения значения:

$('.sela').on('change', function(){
    if($(this).val() == 'ipsum'){console.log('ipsum');}
});

$('button').on('click', function(){
    $('.sela').val('ipsum').change();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class='sela'>
<option>lorem</option>
<option>ipsum</option>
</select>

<button>CLICK</button>

9
задан tvanfosson 11 April 2009 в 18:13
поделиться

5 ответов

Используйте Математику. Log10 абсолютного значения двойного для выяснения, сколько 0 Вам нужен любой, уехал (если положительный) или право (если отрицательный) десятичного разряда. Выберите строку формата на основе этого значения. Вы должны будете обработать нулевые значения отдельно.

string s;
double epislon = 0.0000001; // or however near zero you want to consider as zero
if (Math.Abs(value) < epislon) {
    int digits = Math.Log10( Math.Abs( value ));
    // if (digits >= 0) ++digits; // if you care about the exact number
    if (digits < -5) {
       s = string.Format( "{0:0.000000000}", value );
    }
    else if (digits < 0) {
       s = string.Format( "{0:0.00000})", value );
    }
    else {
       s = string.Format( "{0:#,###,###,##0.000}", value );
    }
}
else {
    s = "0";
}

Или создайте его динамично на основе количества цифр.

15
ответ дан 4 December 2019 в 09:38
поделиться

Вслед за OwenP (и "расширением" tvanfosson):

Если это достаточно распространено, и вы ' Что касается C # 3.0, я бы превратил его в метод расширения на двойном:

class MyExtensions 
{
    public static string ToFormmatedString(this double d)
    {
        // Take d and implement tvanfosson's code
    }
}

Теперь, где бы у вас ни было двойное, вы можете сделать:

double d = 1.005343;
string d_formatted = d.ToFormattedString();
2
ответ дан 4 December 2019 в 09:38
поделиться

Первые две Строки. Формат в Вашем вопросе может быть решен путем автоматического удаления конечных нулей:

String.Format("{0:#,##0.########}", number);

И последний Вы могли решить путем вызова Математики. Вокруг (число, 1) для значений более чем 1 000 и затем используют ту же Строку. Формат.

Что-то как:

String.Format("{0:#,##0.########}", number<1000 ? number : Math.Round(number,1));
2
ответ дан 4 December 2019 в 09:38
поделиться

Используйте # символ для дополнительных положений в строке:

string.Format("{0:#,###,##0.000}", number);

Я не думаю, что можно управлять количеством десятичных разрядов как этот, поскольку точность взаимного завещания, вероятно, портит вещи.

Инкапсулировать логику решения, сколько десятичных разрядов для вывода Вас могло посмотреть на создание пользовательского средства форматирования.

2
ответ дан 4 December 2019 в 09:38
поделиться

Если бы это был я, то я записал бы пользовательский класс обертки и поместил бы код tvanfosson в ToString метод. Тем путем Вы могли все еще работать с двойным значением, но Вы вложите правильное строковое представление примерно все случаи. Это выглядело бы примерно так:

class FormattedDouble
{ 
    public double Value { get; set; }

    protected overrides void ToString()
    {
        // tvanfosson's code to produce the right string
    }
}

Возможно, могло бы быть лучше сделать это структурой, но я сомневаюсь, что это имело бы большое значение. Вы могли использовать класс как это:

var myDouble = new FormattedDouble();
myDouble.Value = Math.Pi;
Console.WriteLine(myDouble);
1
ответ дан 4 December 2019 в 09:38
поделиться
Другие вопросы по тегам:

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