2016-02-18 6 views
0

Мне нужно отбросить дробную часть числа в узле, но я не могу получить правильный результат!Как отбросить дробную часть числа в узле/Javascript

parseInt(2.3*100) == 229 

Это легко сделать это в C:

(int) (2.3f * 100) == 230 
(int) (2.305f * 100) == 230 

Как я могу это сделать в узле?

обратите внимание: некоторые функции (2.305 * 100) должны быть равны 230!

Некоторые испытания в узле:

$ node 
> 2.3*100 == 230 
false 
> parseInt(2.3*100) 
229 
> (2.3*100)|0 
229 
> (2.3*100).toFixed(0) 
'230' 
> (2.305*100).toFixed(0) 
'231' 
> Math.round(2.3*100) 
230 
> Math.round(2.305*100) 
231 
> Math.floor(2.3*100) 
229 
+1

вы должны использовать некоторые BigDecimal для JavaScript (https://github.com/dtrebbien/BigDecimal.js) https: //www.npmjs.com/package/decimal – user1121883

+0

Math.floor() должен делать то, что вы ищете. – icke

+2

Добро пожаловать в неустойчивый мир арифметики с плавающей запятой. Вопреки тому, что вы заявляете, все результаты верны, а не то, что вы ожидаете. Прочтите http://floating-point-gui.de/ для получения дополнительной информации. – Darkhogg

ответ

1

Там нет хороший обходной путь для этого. Большинство десятичных дробей не могут быть представлены точно как двоичные дроби. Подробнее здесь: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

Установка десятичной Фрон НПМ: npm install decimal и использовать следующим образом:

var Decimal = require('decimal'); 
parseInt(Decimal('2.3').mul('100').toNumber()); 
+0

Почему C может это сделать? использует ли оно другое двоичное представление? – Jake

+1

@ Jake C использует арифметику IEEE 754; есть несколько стандартных элементов; не уверен, что использует nodejs; вы также можете найти некоторые примеры, которые не работают, как вы ожидаете – user1121883

Смежные вопросы