Javascript:浮点值未正确显示
我有一个从谷歌金融获取数据的代码。然而,如果存在代表数百万和数千的M或K,它可以正确地获得vo和avvo的数据。如果没有它,则无法正确显示值 如何处理这两种情况以正确获取数据 示例数据如下所示。第一个有浮点数据,第二个有M,我认为是字符串。我可以正确显示字符串,但浮点不正确。它将vo显示为N/A,avvo显示为2.000。我想显示数据中的精确值Javascript:浮点值未正确显示,javascript,angularjs,Javascript,Angularjs,我有一个从谷歌金融获取数据的代码。然而,如果存在代表数百万和数千的M或K,它可以正确地获得vo和avvo的数据。如果没有它,则无法正确显示值 如何处理这两种情况以正确获取数据 示例数据如下所示。第一个有浮点数据,第二个有M,我认为是字符串。我可以正确显示字符串,但浮点不正确。它将vo显示为N/A,avvo显示为2.000。我想显示数据中的精确值 // [ { "id": "549805688244420" ,"t" : "AZG" ,"vo" : "0.00" ,"avvo" : "2,087.
// [
{
"id": "549805688244420"
,"t" : "AZG"
,"vo" : "0.00"
,"avvo" : "2,087.00"
}
]
及
下面是我的代码:
angular.module('myapp.factories').factory('$stockDataFactory',
['$q', '$filter', '$webServicesFactory',
function ($q, $filter, $webServicesFactory) {
return {
getStockDetails: function (stock) {
var deferred = $q.defer();
$webServicesFactory.getNotParsed(
"https://www.google.com/finance/info",
{},
{
infotype: "infoquoteall",
q: stock.market+":"+stock.symbol
}
).then(
function success(response) {
response = JSON.parse("["+response.replace(/\r?\n|\r/g, ' ').split('[').splice(1,1)[0]);
stock = response[0];
var formatedData = {
volume: stock.vo,
averageDailyVolume: stock.avvo
};
html:
卷:
{{stock.volume | |'N/A'}
平均体积:
{{(stock.averageDailyVolume |收缩数:2)| | N/A'}
js中的收缩数
angular.module('chaishen.factories').filter("shrinkNumber", function($filter) {
return function(number, fractionSize) {
if(number === null) return null;
if(number === 0) return "0.000";
// default number of decimals for values >1000 or <-1000 if not set in view
if(!fractionSize || fractionSize < 0)
fractionSize = 1;
var abs = Math.abs(number);
var rounder = Math.pow(10,fractionSize);
var isNegative = number < 0;
var key = '';
var powers = [
{key: "Q", value: Math.pow(10,15)},
{key: "T", value: Math.pow(10,12)},
{key: "B", value: Math.pow(10,9)},
{key: "M", value: Math.pow(10,6)},
{key: "K", value: 1000}
];
for(var i = 0; i < powers.length; i++) {
var reduced = abs / powers[i].value;
//reduced = Math.round(reduced * rounder) / rounder;
reduced = Math.round(abs * rounder) / rounder;
if(reduced >= 1){
abs = reduced;
key = powers[i].key;
break;
}
}
if(number >= 1000) {
//return abs + key;
return abs;
}
else if(number <= -1000) {
//return '-' + abs + key;
return '-' + abs;
}
else {
//return $filter('number')(((isNegative ? '-' : '') + abs + key), 3);
return $filter('number')(((isNegative ? '-' : '') + abs), 3);
}
};
});
angular.module('chaishen.factories').filter('shrinkNumber',函数($filter){
返回函数(数字、分形大小){
if(number==null)返回null;
如果(数字===0)返回“0.000”;
//值>1000或=1时的默认小数位数){
abs=减少的;
key=powers[i].key;
打破
}
}
如果(数字>=1000){
//返回abs+键;
返回abs;
}
否则,如果(number@OneNeptune)与我的问题有什么关系?声明为它们,则您的浮点值只是字符串。但“浮点值不正确”是什么意思?它们是如何显示的?你正确的方式是什么?它在html页面上吗?在哪里?@Kaddath edit添加了html。它显示0为N/a,2870.00为2.00。我在html中输入N/a,就像有时一样,数据是“-”,它将显示为N/a。Thanks@bkcollection你仍然在尝试对字符串进行数学运算。这对你来说是行不通的有三种不同的强制方式:Number(stock.avvo);+stock.avvo;parseInt(stock.avvo,10)
。
<div class="row row-center">
<div class="col boldText">Volume: </div>
<div class="col col-21">{{stock.volume || 'N/A'}}</div>
<div class="col boldText">Avg. Vol: </div>
<div class="col col-21">{{(stock.averageDailyVolume | shrinkNumber: 2) || 'N/A'}}</div>
</div>
angular.module('chaishen.factories').filter("shrinkNumber", function($filter) {
return function(number, fractionSize) {
if(number === null) return null;
if(number === 0) return "0.000";
// default number of decimals for values >1000 or <-1000 if not set in view
if(!fractionSize || fractionSize < 0)
fractionSize = 1;
var abs = Math.abs(number);
var rounder = Math.pow(10,fractionSize);
var isNegative = number < 0;
var key = '';
var powers = [
{key: "Q", value: Math.pow(10,15)},
{key: "T", value: Math.pow(10,12)},
{key: "B", value: Math.pow(10,9)},
{key: "M", value: Math.pow(10,6)},
{key: "K", value: 1000}
];
for(var i = 0; i < powers.length; i++) {
var reduced = abs / powers[i].value;
//reduced = Math.round(reduced * rounder) / rounder;
reduced = Math.round(abs * rounder) / rounder;
if(reduced >= 1){
abs = reduced;
key = powers[i].key;
break;
}
}
if(number >= 1000) {
//return abs + key;
return abs;
}
else if(number <= -1000) {
//return '-' + abs + key;
return '-' + abs;
}
else {
//return $filter('number')(((isNegative ? '-' : '') + abs + key), 3);
return $filter('number')(((isNegative ? '-' : '') + abs), 3);
}
};
});