2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Формат чисел в perl.
Сообщение19.03.2019, 23:36 
Заслуженный участник
Аватара пользователя


11/12/05
9957
Пытаюсь решить (прка безуспешно) следующий вопрос. Есть набор чисел. Часть из них в десятичном формате и часть в scientific, например такие:

3.95346742156e-203
9.00642357853e-128
1.468432579e-5
0.000104584336
0.00012854356
0.046532796467
0.956789834

Есть ли какие-то средства в perl, чтобы привести эти числа в некий единообразный вид (но не формат) чтобы в обоих форматах число цифр после запятой не превышало 3, то есть получилось нечто вроде:

3.953е-203
9.006е-128
1.468е-5
1.045е-4
1.285е-4
0.046
0.956

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение19.03.2019, 23:43 


05/09/16
11518
Э... загадочно однако. А 0,00102341 как обрезать будем?

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение19.03.2019, 23:47 
Заслуженный участник
Аватара пользователя


01/09/13
4318
sprintf ?

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:01 
Заслуженный участник


20/08/14
11124
Россия, Москва
Dan B-Yallay в сообщении #1383008 писал(а):
0.000104584336
0.046532796467
0.956789834
...
1.045е-4
0.046
0.956
А почему округлено именно так? Должно быть вверх.

Кроме того, ни одно из этих чисел не представимо в двоичной системе точно, потому они все всё равно будут внутри приблизительными (надеюсь perl не хранит числа в десятичной системе :facepalm:). А "точные"/круглые можно получить лишь при выводе - и как раз форматом.

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:08 
Заслуженный участник
Аватара пользователя


11/12/05
9957
wrest в сообщении #1383009 писал(а):
А 0,00102341

1.023е-3

Geen в сообщении #1383010 писал(а):
sprintf ?

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

Dmitriy40 в сообщении #1383013 писал(а):
А почему округлено именно так?

Да это я второпях для примеру, чтоб понятно чего требуется. Поленился правильно округлить.

Тут погоня не столько за точностью в 4-ом и далее знаках после запятой, а в "красоте" представления.

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:17 
Заслуженный участник
Аватара пользователя


01/09/13
4318
Dan B-Yallay в сообщении #1383014 писал(а):
но оно вроде только в единый формат

%g ?

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:38 
Заслуженный участник
Аватара пользователя


11/12/05
9957
Geen в сообщении #1383018 писал(а):
%g ?

Да, видимо придётся "%0.2g" и всё в сайентифик. Спасибо.

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:48 
Заслуженный участник
Аватара пользователя


01/09/13
4318
Dan B-Yallay в сообщении #1383022 писал(а):
видимо придётся "%0.2g"
Кажется ноль перед точкой лишний.
Dan B-Yallay в сообщении #1383022 писал(а):
и всё в сайентифик.
Так это же зависит, как раз.

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 00:50 
Заслуженный участник


20/08/14
11124
Россия, Москва
Не уверен что это получится совсем красиво:
Используется синтаксис C
void main(void) {
    double x = 0.000000123456789;
    while (x < 100000) {
        printf("%0.3g\n", x);
        x *= 10;
    }
}
Используется синтаксис Perl
$x = 0.0000000123456789;
while ($x < 100000) {
    printf("%0.3g\n", $x);
    $x *= 10;
}
Используется синтаксис Text
1.23e-07
1.23e-06
1.23e-05
0.000123
0.00123
0.0123
0.123
1.23
12.3
123
1.23e+03
1.23e+04

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 08:13 


05/09/16
11518
Dan B-Yallay в сообщении #1383014 писал(а):
А 0,00102341
1.023е-3

А почему 0.00102341 округляется в 1.023е-3, при том что 0.046532796467 округляется в 0.046, а не в 4.653e-2?

 Профиль  
                  
 
 Re: Формат чисел в perl.
Сообщение20.03.2019, 20:46 
Заслуженный участник
Аватара пользователя


11/12/05
9957
wrest в сообщении #1383049 писал(а):
А почему 0.00102341 округляется в 1.023е-3, при том что 0.046532796467 округляется в 0.046, а не в 4.653e-2?
Просто 0.046 и так уже смотрится неплохо в таблице, 0.001 не очень.

Geen
Dmitriy40

Спасибо всем за участие. До нужного результата дообработаю напильником.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group