Browse Source

修复还价小数点问题

Xfy
User 5 days ago
parent
commit
13d84b00f4
  1. BIN
      images/background.png
  2. 76
      pages/compare_price/index.js
  3. 44
      pages/goods-detail/goods-detail.js

BIN
images/background.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 672 KiB

76
pages/compare_price/index.js

@ -43,6 +43,22 @@ function processSpecifications(spec) {
return specs; return specs;
} }
// 格式化价格,最多显示一位小数
function formatPrice(price) {
if (price === null || price === undefined) {
return price;
}
// 转换为数字
const numPrice = parseFloat(price);
if (isNaN(numPrice)) {
return price;
}
// 格式化到一位小数
return numPrice.toFixed(1);
}
Page({ Page({
data: { data: {
// 页面数据 // 页面数据
@ -111,6 +127,22 @@ Page({
if (Array.isArray(goodsData.price)) { if (Array.isArray(goodsData.price)) {
goodsData.price = goodsData.price[0]; goodsData.price = goodsData.price[0];
} }
// 格式化价格,最多显示一位小数
goodsData.price = formatPrice(goodsData.price);
}
// 处理原始价格
if (goodsData.originalPrice) {
// 如果原始价格是字符串且包含逗号,只取第一个价格
if (typeof goodsData.originalPrice === 'string' && goodsData.originalPrice.includes(',')) {
goodsData.originalPrice = goodsData.originalPrice.split(',')[0].trim();
}
// 如果原始价格是数组,只取第一个价格
if (Array.isArray(goodsData.originalPrice)) {
goodsData.originalPrice = goodsData.originalPrice[0];
}
// 格式化原始价格,最多显示一位小数
goodsData.originalPrice = formatPrice(goodsData.originalPrice);
} }
// 保存选择的种类、规格和当前商品数据到页面数据 // 保存选择的种类、规格和当前商品数据到页面数据
@ -305,6 +337,22 @@ Page({
if (Array.isArray(item.price)) { if (Array.isArray(item.price)) {
item.price = item.price[0]; item.price = item.price[0];
} }
// 格式化价格,最多显示一位小数
item.price = formatPrice(item.price);
}
// 处理原始价格
if (item.originalPrice) {
// 如果原始价格是字符串且包含逗号,只取第一个价格
if (typeof item.originalPrice === 'string' && item.originalPrice.includes(',')) {
item.originalPrice = item.originalPrice.split(',')[0].trim();
}
// 如果原始价格是数组,只取第一个价格
if (Array.isArray(item.originalPrice)) {
item.originalPrice = item.originalPrice[0];
}
// 格式化原始价格,最多显示一位小数
item.originalPrice = formatPrice(item.originalPrice);
} }
// 处理规格信息,将多个净重信息分割成数组 // 处理规格信息,将多个净重信息分割成数组
@ -514,6 +562,34 @@ Page({
}); });
} }
// 清理价格字段,确保只显示单一价格
if (item.price) {
// 如果价格是字符串且包含逗号,只取第一个价格
if (typeof item.price === 'string' && item.price.includes(',')) {
item.price = item.price.split(',')[0].trim();
}
// 如果价格是数组,只取第一个价格
if (Array.isArray(item.price)) {
item.price = item.price[0];
}
// 格式化价格,最多显示一位小数
item.price = formatPrice(item.price);
}
// 处理原始价格
if (item.originalPrice) {
// 如果原始价格是字符串且包含逗号,只取第一个价格
if (typeof item.originalPrice === 'string' && item.originalPrice.includes(',')) {
item.originalPrice = item.originalPrice.split(',')[0].trim();
}
// 如果原始价格是数组,只取第一个价格
if (Array.isArray(item.originalPrice)) {
item.originalPrice = item.originalPrice[0];
}
// 格式化原始价格,最多显示一位小数
item.originalPrice = formatPrice(item.originalPrice);
}
// 处理规格信息,将多个净重信息分割成数组 // 处理规格信息,将多个净重信息分割成数组
item.processedSpecs = []; item.processedSpecs = [];
if (item.specification) { if (item.specification) {

44
pages/goods-detail/goods-detail.js

@ -338,6 +338,22 @@ function formatDateTime(dateString) {
return dateString; return dateString;
} }
// 格式化价格,解决浮点数精度问题
function formatPrice(price) {
if (price === null || price === undefined) {
return price;
}
// 转换为数字
const numPrice = parseFloat(price);
if (isNaN(numPrice)) {
return price;
}
// 格式化到一位小数
return parseFloat(numPrice.toFixed(1));
}
// 格式化北京时间的函数 // 格式化北京时间的函数
function formatBeijingTime(dateString) { function formatBeijingTime(dateString) {
if (!dateString) return '未知时间'; if (!dateString) return '未知时间';
@ -793,9 +809,9 @@ Page({
} }
const priceRange = middlePrice < 20 ? 1 : 5; const priceRange = middlePrice < 20 ? 1 : 5;
const minPrice = middlePrice - priceRange; const minPrice = formatPrice(middlePrice - priceRange);
const maxPrice = middlePrice + priceRange; const maxPrice = formatPrice(middlePrice + priceRange);
const defaultPrice = parseFloat(middlePrice.toFixed(2)); const defaultPrice = formatPrice(middlePrice);
const priceThreshold = middlePrice < 20 ? 0.1 : 2; const priceThreshold = middlePrice < 20 ? 0.1 : 2;
console.log('计算后的价格数据:', { console.log('计算后的价格数据:', {
@ -855,9 +871,9 @@ Page({
} }
const priceRange = middlePrice < 20 ? 1 : 5; const priceRange = middlePrice < 20 ? 1 : 5;
const minPrice = middlePrice - priceRange; const minPrice = formatPrice(middlePrice - priceRange);
const maxPrice = middlePrice + priceRange; const maxPrice = formatPrice(middlePrice + priceRange);
const currentPrice = parseFloat(middlePrice.toFixed(2)); const currentPrice = formatPrice(middlePrice);
const priceThreshold = middlePrice < 20 ? 0.3 : 2; const priceThreshold = middlePrice < 20 ? 0.3 : 2;
console.log('选择规格 - 价格数据:', { console.log('选择规格 - 价格数据:', {
@ -926,7 +942,7 @@ Page({
if (bargainPrice > minPrice) { if (bargainPrice > minPrice) {
const step = bargainPrice < 20 ? 0.1 : 1; const step = bargainPrice < 20 ? 0.1 : 1;
const newPrice = parseFloat((bargainPrice - step).toFixed(2)); const newPrice = formatPrice(bargainPrice - step);
console.log('计算新价格:', newPrice); console.log('计算新价格:', newPrice);
this.updatePrice(newPrice); this.updatePrice(newPrice);
} }
@ -943,7 +959,7 @@ Page({
if (bargainPrice < maxPrice) { if (bargainPrice < maxPrice) {
const step = bargainPrice < 20 ? 0.1 : 1; const step = bargainPrice < 20 ? 0.1 : 1;
const newPrice = parseFloat((bargainPrice + step).toFixed(2)); const newPrice = formatPrice(bargainPrice + step);
console.log('计算新价格:', newPrice); console.log('计算新价格:', newPrice);
this.updatePrice(newPrice); this.updatePrice(newPrice);
} }
@ -954,7 +970,7 @@ Page({
const { minPrice, maxPrice } = this.data; const { minPrice, maxPrice } = this.data;
const clampedPrice = Math.max(minPrice, Math.min(maxPrice, newPrice)); const clampedPrice = Math.max(minPrice, Math.min(maxPrice, newPrice));
const progress = ((clampedPrice - minPrice) / (maxPrice - minPrice)) * 100; const progress = ((clampedPrice - minPrice) / (maxPrice - minPrice)) * 100;
const finalPrice = parseFloat(clampedPrice.toFixed(2)); const finalPrice = formatPrice(clampedPrice);
console.log('更新价格:', { console.log('更新价格:', {
inputPrice: newPrice, inputPrice: newPrice,
@ -1018,8 +1034,10 @@ Page({
if (!isNaN(price)) { if (!isNaN(price)) {
const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price)); const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price));
const formattedPrice = formatPrice(clampedPrice);
console.log('计算后的价格:', clampedPrice); console.log('计算后的价格:', clampedPrice);
this.updatePrice(clampedPrice); console.log('格式化后的价格:', formattedPrice);
this.updatePrice(formattedPrice);
} }
this.setData({ this.setData({
@ -1056,11 +1074,7 @@ Page({
const priceRange = maxPrice - minPrice; const priceRange = maxPrice - minPrice;
let price = minPrice + (progress / 100) * priceRange; let price = minPrice + (progress / 100) * priceRange;
if (bargainPrice < 20) { price = formatPrice(price);
price = Math.round(price * 10) / 10;
} else {
price = Math.round(price);
}
const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price)); const clampedPrice = Math.max(minPrice, Math.min(maxPrice, price));

Loading…
Cancel
Save