Строка. Формат (“{0:C2}”,-1234) (Формат валюты) рассматривает отрицательные числа как положительные

Обновлен метод SaveImage () для поддержки рисования текста.

void saveImage() {
    File myDir=new File("/sdcard/saved_images");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-"+ n +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
        FileOutputStream out = new FileOutputStream(file);

        // NEWLY ADDED CODE STARTS HERE [
            Canvas canvas = new Canvas(originalBitmap);

            Paint paint = new Paint();
            paint.setColor(Color.WHITE); // Text Color
            paint.setTextSize(12); // Text Size
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)); // Text Overlapping Pattern
            // some more settings...

            canvas.drawBitmap(originalBitmap, 0, 0, paint);
            canvas.drawText("Testing...", 10, 10, paint);
        // NEWLY ADDED CODE ENDS HERE ]

        originalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        out.flush();
        out.close();
    } catch (Exception e) {
       e.printStackTrace();
    }
}

Дайте мне знать, если это работает для вас.

Шаш

17
задан Zanon 30 December 2015 в 22:43
поделиться

2 ответа

Думаю, я просто буду использовать:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)

(в модуле Microsoft.VisualBasic.Strings)

Или, короче (это то, что я собираюсь использовать):

FormatCurrency(-1234.56, 2, 0, 0)

Или я создам для себя пользовательскую функцию formatcurrency, которая использует функцию VB, передающую мои пользовательские параметры.

Для получения дополнительных сведений см. Функция FormatCurrency (Visual Basic) в msdn.

9
ответ дан 30 November 2019 в 10:17
поделиться

Правильно ли я говорю, что он помещает его в квадратные скобки, то есть форматирует его как (1234,00 $) ? Если да, то я считаю, что это предполагаемое поведение для США.

Однако вы можете создать свой собственный NumberFormatInfo , который не ведет себя подобным образом. Возьмите существующий NumberFormatInfo , который "в основном правильный", вызовите Clone () , чтобы сделать изменяемую копию, а затем установите CurrencyNegativePattern соответствующим образом (я думаю, вам нужно значение 2).

Например:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        var usCulture = CultureInfo.CreateSpecificCulture("en-US");
        var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
        clonedNumbers.CurrencyNegativePattern = 2;
        string formatted = string.Format(clonedNumbers, "{0:C2}", -1234);
        Console.WriteLine(formatted);
    }
}

Это напечатает $ - 1,234,00. Если вам действительно нужно ровно -1234 доллара, вам нужно установить для свойства CurrencyGroupSizes значение new int [] {0} и использовать "{0: C0}" вместо "{0: C2}" в качестве строки формата.

РЕДАКТИРОВАТЬ: вот вспомогательный метод, который вы можете использовать, который в основном делает то же самое:

private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat();

private static NumberFormatInfo CreateCurrencyFormat()
{
    var usCulture = CultureInfo.CreateSpecificCulture("en-US");
    var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
    clonedNumbers.CurrencyNegativePattern = 2;
    return clonedNumbers;
}

public static string FormatCurrency(decimal value)
{
    return value.ToString("C2", CurrencyFormat);
}
30
ответ дан 30 November 2019 в 10:17
поделиться
Другие вопросы по тегам:

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