В tcl как получить дробную часть заданного числа - PullRequest
1 голос
/ 22 мая 2019

В коде tcl я хочу получить дробную часть заданного числа.

Я попробовал следующий код

set a 2.9999383 

expr {fmod($a,1)} gives me 0.9999383000000002

Как получить правильную дробную часть без дополнительных десятичных цифр?

Спасибо

Ответы [ 3 ]

2 голосов
/ 22 мая 2019

Вы открыли для себя самое интересное с числами с плавающей запятой! Хитрость заключается в том, чтобы угадать, сколько цифр есть после плавающей запятой (не должно быть слишком точным!) И использовать это с format для округления.

format "%.*g" [string length $a] [expr {fmod($a, 1.0)}]

Это дает 0.9999383 с вашими тестовыми данными, но при этом делает несколько предположений относительно ввода ...

0 голосов
/ 22 мая 2019

В противном случае вы можете использовать разбиение строки:

set a 2.9999383
set fraction "0.[lindex [split $a "."] 1]"
puts $fraction
0.9999383

Это позволит избежать необходимости видеть, деформирована ли дробь и / или должна быть округлена или нет.

0 голосов
/ 22 мая 2019

Поплавки являются неточными оценками. Эти «дополнительные цифры» являются просто результатом наилучшей попытки системы приблизить десятичное число в системе с основанием два.

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

format "%.2f" $a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...