PHP: использовать float с заданной точностью в функции json_encode () [duplicate]

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

Иногда подавление запроса как @mysql_query(your query);

6
задан user3335966 2 November 2015 в 04:27
поделиться

6 ответов

Посмотрите на Как справиться с точностью чисел с плавающей запятой в JavaScript?

Вот пример

function roundNumber(number, decimals) {
  decimals = parseInt(decimals,10);
  var dec = Math.pow(10,decimals)
  console.log(dec,parseFloat(number)*dec);
  number=""+Math.round(parseFloat(number)*dec+.0000000000001); // fixed the .X99999999999
  return parseFloat(number.slice(0,-1*decimals) + "." + number.slice(-1*decimals))     
}


var val = 43.65 * 2.5;
    val+= val*0.40

console.log(val+' ~= 152.78? --> '+roundNumber(val,2).toFixed(2));
console.log('15.803 ~= 15.80? --> '+roundNumber(15.803,2).toFixed(2));
console.log('15.805 ~= 15.81? --> '+roundNumber(15.805,2).toFixed(2));
console.log('14.803 ~= 14.80? --> '+roundNumber(14.803,2).toFixed(2));
console.log('0.575 ~=  0.58? --> '+roundNumber(0.575,2).toFixed(2));

2
ответ дан Community 1 September 2018 в 04:20
поделиться

Это не имеет ничего общего с округлением как таковым, а связано с тем, как десятичные числа представлены в двоичном оборудовании.

Проверьте руководство по плавающей запятой для получения дополнительной информации об этом, а также решения / альтернативы.

5
ответ дан Andrzej Doyle 1 September 2018 в 04:20
поделиться

Я немного подумал об этом и хотел поделиться своим решением, пусть оно не пропадает даром:

function roundNumber(number, decimals) {      
    var d = parseInt(decimals,10),
        dx = Math.pow(10,d),
        n = parseFloat(number),
        f = Math.round(Math.round(n * dx * 10) / 10) / dx;
    return f.toFixed(d);
}

Это не использует строковые функции или любое принудительное округление вверх или вниз.

Проверьте это здесь: http://jsfiddle.net/inti/hMrsp/4/

Изменить: исправлено, сокращалось нули в конце

3
ответ дан aorcsik 1 September 2018 в 04:20
поделиться

раундов php до 152.78, потому что он видит 152.77499, который равен 152.775 и в конце 152.178. вы не можете использовать округленное значение из php?

1
ответ дан Dimitar Marinov 1 September 2018 в 04:20
поделиться

Найти функцию javascript для формата номера

<script type="text/javascript">
function format_number(pnumber,decimals){
    if (isNaN(pnumber)) { return 0};
    if (pnumber=='') { return 0};

    var snum = new String(pnumber);
    var sec = snum.split('.');
    var whole = parseFloat(sec[0]);
    var result = '';

    if(sec.length > 1){
        var dec = new String(sec[1]);
        dec = String(parseFloat(sec[1])/Math.pow(10,(dec.length - decimals)));
        dec = String(whole + Math.round(parseFloat(dec))/Math.pow(10,decimals));
        var dot = dec.indexOf('.');
        if(dot == -1){
            dec += '.';
            dot = dec.indexOf('.');
        }
        while(dec.length <= dot + decimals) { dec += '0'; }
        result = dec;
    } else{
        var dot;
        var dec = new String(whole);
        dec += '.';
        dot = dec.indexOf('.');
        while(dec.length <= dot + decimals) { dec += '0'; }
        result = dec;
    }   
    return result;
}

var value = format_number(newnumber,2);
</script>
-1
ответ дан Sanjeev Chauhan 1 September 2018 в 04:20
поделиться

Это связано с тем, что различные значения, используемые в JS (браузером) и PHP или на самом деле, сколько бит используется для хранения чисел.

вы можете заставить вашу функцию округления JS сделать это, чтобы округлить до вторая цифра Math.round(floatNumber*100)/100

1
ответ дан venimus 1 September 2018 в 04:20
поделиться
Другие вопросы по тегам:

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