2014 dxdy logo

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

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




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


11/12/05
10056
Пытаюсь решить (прка безуспешно) следующий вопрос. Есть набор чисел. Часть из них в десятичном формате и часть в 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
12056
Э... загадочно однако. А 0,00102341 как обрезать будем?

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


01/09/13
4656
sprintf ?

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


20/08/14
11760
Россия, Москва
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
10056
wrest в сообщении #1383009 писал(а):
А 0,00102341

1.023е-3

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

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

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

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

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

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


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

%g ?

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


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

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

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


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

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


20/08/14
11760
Россия, Москва
Не уверен что это получится совсем красиво:
Используется синтаксис 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
12056
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
10056
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, Супермодераторы



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

Сейчас этот форум просматривают: Yustas


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

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