Округление в меньшую сторону числа в Visual Basic

Objective C, как Smalltalk, не имеет никакого понятия "частных" по сравнению с "общедоступными" методами. Любое сообщение может быть отправлено в любой объект в любое время.

то, Что можно сделать, бросить NSInternalInconsistencyException, если Ваш -init метод вызывается:

- (id)init {
    [self release];
    @throw [NSException exceptionWithName:NSInternalInconsistencyException
                                   reason:@"-init is not a valid initializer for the class Foo"
                                 userInfo:nil];
    return nil;
}

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

, При попытке сделать это, потому что Вы пытаетесь "удостовериться", одноэлементный объект используется, не беспокоиться. А именно, не беспокойтесь "переопределением +allocWithZone:, -init, -retain, -release" метод создания одиночных элементов. Это является фактически всегда ненужным и просто добавляет сложность ни для какого реального значительного преимущества.

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

7
задан Peter Mortensen 22 November 2016 в 17:21
поделиться

3 ответа

. Вы можете сделать это с помощью Math.Floor . Однако вам нужно будет умножить * 100 и разделить, так как вы можете ' t укажите количество цифр

Dim theNumber as Double
theNumber = 2.556
Dim theRounded = Math.Sign(theNumber) * Math.Floor(Math.Abs(theNumber) * 100) / 100.0
11
ответ дан 6 December 2019 в 11:51
поделиться

Другой способ сделать это, который не зависит от использования типа String:

Dim numberToRound As Decimal
Dim truncatedResult As Decimal
numberToRound = 2.556
truncatedResult = (Fix(numberToRound*100))/100
3
ответ дан 6 December 2019 в 11:51
поделиться

Ответ Math.Floor () хорош. Я не уверен, в каких средах VB определено Fix (). Как указывает Джастин, Math.Floor () не будет работать с отрицательными числами. Вам нужно будет взять абсолютное значение, а затем умножить его на SGN (). Я не знаю точного имени функции, которую вы бы использовали для получения SiGN (а не sin ()) числа.

В псевдокоде с учетом отрицательных значений результат будет выглядеть так:

result = sgn( num ) * floor( abs( num * RoundToDig ) ) / RoundToDig

- Пушистые коровы мычат и расслабляются.

2
ответ дан 6 December 2019 в 11:51
поделиться
Другие вопросы по тегам:

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