我正在编写一个脚本来计算表面的价格,比如' m2'。下面是我的脚本,但我想要的是欧元是2位小数。我怎样才能解决这个问题?我已经尝试过parseFloat()和toFixed(2),但我认为它并没有在正确的地方过去。
var surface;
var totalPrice;
function calculateSurface() {
var length = document.getElementById("length").value;
var width = document.getElementById("width").value;
surface = length * width;
}
function calculatePrice() {
var area = $('#area').val();
if(area=='pur3') {
totalPrice = surface * 16;
}
else if(area=='pur4') {
totalPrice = surface * 17.50;
}
else if(area=='pur5') {
totalPrice = surface * 19;
}
else if(area=='pur6') {
totalPrice = surface * 21;
}
else if(area=='pur7') {
totalPrice = surface * 23.50;
}
}
function showResults() {
return surface + ' ' + totalPrice;
}
$("#calc").click(function(e) {
e.preventDefault();
calculateSurface();
calculatePrice();
$('.result').html('Aantal oppervlakte: ' + surface + ' m²' + '<br>' + '€ ' + totalPrice + '' );
});
答案 0 :(得分:2)
就像它说的那样,你应该只在打印任何东西时圆。始终保持实际计算值,以避免精度损失。实际上,在保存数据时,您应该保存参数而不仅仅是结果,因为如果需要,您可以随时使用原始参数重新计算。
以jsfiddle为例:
var areaBasePrice = {
'pur3': 16,
'pur4': 17.50,
'pur5': 19,
'pur6': 21,
'pur7': 23.5
};
function calculateSurface() {
var length = $("#length").val();
var width = $("#width").val();
return length * width;
}
function calculatePrice() {
var area = $('#area').val();
return areaBasePrice[area] * calculateSurface();
}
$("#calc").click(function(e) {
var surface = calculateSurface();
var price = calculatePrice();
$('.result').html('Aantal oppervlakte: ' + surface + ' m²' + '<br>' + '€ ' + price.toFixed(2) );
e.preventDefault();
});
关于浮动值精度损失的说明。除非你是在为一家拥有许多关键交易的银行公司工作,否则你应该真的不要担心四舍五入的价值(向上或向下)。如果您这样做,则发送您的参数服务器端和/或使用适当的货币操作库来满足您的需求。
答案 1 :(得分:0)
所以你的所有价值都变成你以前的价值* 100,所以:
if(area=='pur3') {
totalPrice = surface * 1600;
}
else if(area=='pur4') {
totalPrice = surface * 1750;
}
else if(area=='pur5') {
totalPrice = surface * 1900;
}
else if(area=='pur6') {
totalPrice = surface * 2100;
}
else if(area=='pur7') {
totalPrice = surface * 2350;
}
然后当您显示价格时,除以100并将其固定为2位小数:
$("#calc").click(function(e) {
e.preventDefault();
calculateSurface();
calculatePrice();
var fixedPrice = (totalPrice/100).toFixed(2);
$('.result').html('Aantal oppervlakte: ' + surface + ' m²' + '<br>' + '€ ' + fixedPrice + '' );
});
或类似的东西。
答案 2 :(得分:0)
如果您试图强制使用2位小数,.toFixed()
将无法帮助您处理不需要该精度的数字(即3.5)。我为这个场景创建了一个JSFiddle:
更新了JS:
function formatCurrency ( number ) {
return Math.floor(number) + '.' + (Math.floor(number % 1 * 100) || '00');
}
function calculateSurface() {
return $('#length').val() * $('#width').val();
}
function calculatePrice(surface) {
var lookup = {
pur3: 16, pur4: 17.5,
pur5: 19, pur6: 21,
pur7: 23.5
};
return surface * lookup[$('#area').val()];
}
$("#calc").click(function(e) {
e.preventDefault();
var surface = calculateSurface(),
price = calculatePrice(surface);
$('.result').html(
'Aantal oppervlakte: ' + surface +
' m²<br>€ ' + formatCurrency(price)
);
});