Как заставить PaintCode не округлять числа при преобразовании их в строку?

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

stringFromNumber(voltage) + 'V'

и напряжение 12,4, он будет выдавать 12 В. Это нехорошо. Я мог бы легко исправить это, отредактировав получившийся StyleKit, но мне пришлось бы делать это каждый раз, когда я вносил изменения, что было бы настоящей болью. у кого-нибудь есть решение?

Я работаю с выводом С#, но проблема существует как с С#, так и с Objective-C.

Соответствующий код:

В PaintCode у меня есть выражение Voltage String stringFromNumber(voltage) + 'V', которое генерирует:

private void DrawGuage(float voltage) {  
    ...  
    var voltageString = new NSString(Math.Round(voltage).ToString()) + "V";
    ...

Я хочу, чтобы PaintCode генерировал то же самое, но без Math.round.


person EddBC    schedule 18.06.2014    source источник
comment
Можете ли вы показать, как вы объявляете и получаете voltage? Полный пример был бы полезен, даже с жестко закодированными значениями.   -  person Jon Skeet    schedule 18.06.2014
comment
Просто к вашему сведению, довольно сложно настроить код, сгенерированный PaintCode. Обычно я использую вывод PaintCode в качестве отправной точки и изменяю его для своих нужд. Делать такие вещи, как изменение строковых значений и цветов с помощью переменных, довольно просто, если вы научитесь использовать API-интерфейсы CoreGraphics и поймете, что делает PaintCode.   -  person jonathanpeppers    schedule 18.06.2014


Ответы (2)


Я нашел путь. Это немного грязно, но это работает.

stringFromNumber(floor(voltage)) + (
        frac(voltage) != 0 ? '.'+stringFromNumber(frac(voltage)*10) : ''
) + 'V'

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

stringFromNumber(round(number)) + "." + stringFromNumber(round(number * 100 % 100))
person EddBC    schedule 19.06.2014
comment
Форматирование чисел — довольно сложная задача с множеством параметров. Первое, что приходит на ум, — количество дробных цифр, заполнение нулями конечных дробных цифр, десятичный разделитель (для текущего языка). Функция станет довольно сложной. Как насчет форматирования строки в вашем коде и передачи в качестве аргумента? Я только что заметил, сколько лет этим вопросам и ответам. Однако тема актуальна и сегодня. - person Tricertops; 30.01.2016

Упомянутый ответ PaintCode не является 100%. если у вас есть значение x,5, оно будет округлено до x+1, а затем будет добавлено 0,5, поэтому вместо 0,5 вы получите 1,5 или вместо 10,7 вы получите 11,7. Таким образом, вы должны вычесть 1 из вашего десятичного числа 0,5 или выше.

Так что я поиграл с некоторыми математическими функциями и PaintCode. И я использую выражение с использованным для использования логического значения, если число такое же или выше 0,5, если это так, оно вычтет 1 число доминатора. Это функция, которую я использовал в качестве значения выражения в PaintCode.

(round(number * 100 % 100) < 50)?(stringFromNumber(round(number)) + "." + stringFromNumber(round(number * 100 % 100))):(stringFromNumber(round(number)-1) + "." + stringFromNumber(round(number * 100 % 100)))
person martin    schedule 05.01.2016
comment
Возможно, было бы проще форматировать числа в коде, используя правильный NSNumberFormatter с желаемыми настройками и текущим языком пользователя, а затем передавая строку в качестве аргумента. - person Tricertops; 30.01.2016