Вычисление силы для округления в C # [дубликат]

Самый простой способ - использовать класс Scanner в Java и объект FileReader. Простой пример:

Scanner in = new Scanner(new FileReader("filename.txt"));

Scanner имеет несколько методов для чтения в строках, числах и т. Д. Вы можете найти дополнительную информацию об этом на странице документации Java.

Например, прочитав весь контент в String:

StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
    sb.append(in.next());
}
in.close();
outString = sb.toString();

Также, если вам нужна конкретная кодировка, вы можете использовать это вместо FileReader:

new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)
46
задан william 16 January 2012 в 06:51
поделиться

7 ответов

Используйте Math.Ceiling для округления

Math.Ceiling(0.5); // 1

Используйте Math.Round для округления

Math.Round(0.5, MidpointRounding.AwayFromZero); // 1

И Math.Floor округлить

Math.Floor(0.5); // 0
115
ответ дан Alex Angas 18 August 2018 в 05:41
поделиться
  • 1
    Вам нужно больше работать с Math.Round. Он предоставляет перечисление (MidpointRounding), чтобы точно определить поведение. – jnielsen 13 October 2010 в 04:42
  • 2
    bb = (int) Math.Round (b, 0, MidpointRounding.AwayFromZero); – jnielsen 13 October 2010 в 04:43
  • 3
    -1 для округления банкира по умолчанию. – Danny Chen 13 October 2010 в 04:43
  • 4
    @jnielsen: Спасибо, что указали это и на пример кода. Я исправил это. – BrunoLM 13 October 2010 в 04:44
  • 5

C # использует округление банкира в Math.Round по умолчанию. Вы должны использовать эту перегрузку:

Math.Round(0.5d, MidpointRounding.AwayFromZero)  //1
Math.Round(0.4d, MidpointRounding.AwayFromZero)  //0
4
ответ дан Danny Chen 18 August 2018 в 05:41
поделиться

Это просто. Итак, следуйте этому коду.

decimal d = 10.5;
int roundNumber = (int)Math.Floor(d + 0.5);

Результат - 11

-1
ответ дан Developer 18 August 2018 в 05:41
поделиться

Проверьте Math.Round . Затем вы можете передать результат в int.

14
ответ дан Larsenal 18 August 2018 в 05:41
поделиться

Math.Round

Устанавливает значение с плавающей запятой с двойной точностью до ближайшего целочисленного значения.

3
ответ дан Mitch Wheat 18 August 2018 в 05:41
поделиться
  • 1
    Однако: «Поведение этого метода следует за стандартом IEEE 754, раздел 4. Этот вид округления иногда называют округлением до ближайшего или округления банкира. ... & Quot; – user 16 January 2012 в 06:52

Используйте функцию вместо MidpointRounding.AwayFromZero:

myRound(1.11125,4)

Ответ: - 1.1114

public static Double myRound(Double Value, int places = 1000)
{
    Double myvalue = (Double)Value;
    if (places == 1000)
    {
        if (myvalue - (int)myvalue == 0.5)
        {
            myvalue = myvalue + 0.1;
            return (Double)Math.Round(myvalue);
        }
        return (Double)Math.Round(myvalue);
        places = myvalue.ToString().Substring(myvalue.ToString().IndexOf(".") + 1).Length - 1;
    } if ((myvalue * Math.Pow(10, places)) - (int)(myvalue * Math.Pow(10, places)) > 0.49)
    {
        myvalue = (myvalue * Math.Pow(10, places + 1)) + 1;
        myvalue = (myvalue / Math.Pow(10, places + 1));
    }
    return (Double)Math.Round(myvalue, places);
}
3
ответ дан sth 18 August 2018 в 05:41
поделиться
  • 1
    Это не удастся, если текущая культура использует запятые вместо полных остановок для десятичной точки. – Sean Reid 27 August 2015 в 12:33

Math.Round (0.5) возвращает ноль из-за ошибок округления с плавающей запятой, поэтому вам нужно добавить сумму округления к исходному значению, чтобы гарантировать, что она не округляется, например.

Console.WriteLine(Math.Round(0.5, 0).ToString()); // outputs 0 (!!)
Console.WriteLine(Math.Round(1.5, 0).ToString()); // outputs 2
Console.WriteLine(Math.Round(0.5 + 0.00000001, 0).ToString()); // outputs 1
Console.WriteLine(Math.Round(1.5 + 0.00000001, 0).ToString()); // outputs 2
Console.ReadKey();
0
ответ дан Will 18 August 2018 в 05:41
поделиться
  • 1
    для меня это не важно ... я также узнал об этом. – william 13 October 2010 в 04:36
  • 2
    Ошибок нет. 1/2 может быть представлен точно как двойной. Документы говорят: «Если дробная составляющая а находится на полпути между двумя целыми числами, одна из которых является четной, а другая нечетной, то возвращается четное число. 0 - четное число. Этот фактор выдумки сделает цифры, как 0,499999995, неправильными. – Matthew Flaschen 13 October 2010 в 04:37
  • 3
    Приветствия за хедз-ап. Я пытался обеспечить, чтобы OP знал, что Round не работает так просто, как другие предлагали. К счастью, OP теперь знает, чтобы следить за ним, и я лучше понимаю Round. знак равно – Will 13 October 2010 в 05:10
Другие вопросы по тегам:

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