sprintf (), чтобы обрезать, а не округлять число с плавающей запятой до x десятичных разрядов? - PullRequest
1 голос
/ 14 ноября 2009

При расчете разницы в гандикапе для гольфа вы должны усечь ответ до 1 десятичного знака без округления. Не знаю почему, но ...

Я знаю, как это сделать, используя TRUNCATE () в mySQL

 SELECT TRUNCATE( 2.365, 1 );
// outputs 2.3

но мне было интересно, может ли sprintf () сделать это? Единственный известный мне способ работы с десятичными разрядами в поплавке - это ...

echo sprintf("%.1f", 2.365);
// outputs 2.4

1 Ответ

7 голосов
/ 14 ноября 2009

На каком это языке? Предполагая, что это C или одна из его производных, и предполагая, что вы всегда хотите точно одно десятичное место, и предполагая, что ваши значения всегда неотрицательны, вы можете сделать это:

float val = 12.3456;
val = floor(val*10.0)/10.0;
sprintf("%.1f", val);

Есть ли лучший способ? Наверное. Это как раз то, что приходит на ум.

...