将小数转换为厘米或英寸后有条件地格式化小数
Conditionally format number decimals after converting them to centimetres or inches
我有一个开关可以将我的数字转换为厘米或英寸,保留一位小数。
但是,我希望厘米没有小数点,而英寸有 1 位小数。
这是我当前的代码:
function converTo(scale) {
$('#ct_size_guide-1761 td').each(() => {
// I forgot exact conversion:
var multiplier = (scale == 'in') ? 2.5 : 0.4;
var newVal=(parseFloat($(this).text()) * multiplier).toFixed(1);
$(this).text(newVal);
$(this).siblings('.scale').text((scale=='in')? 'cm' : 'in') ;
});
}
您只需要有条件地格式化数字,就像您根据所选单位为 multiplier
使用不同的值一样。
所以你需要替换:
var multiplier = scale === 'in' ? 2.5 : 0.4;
var newVal = (parseFloat($(this).text()) * multiplier).toFixed(1);
与类似的东西:
var newVal = scale === 'in'
? (parseFloat($(this).text()) * 2.5).toFixed(1)
: (parseFloat($(this).text()) * 0.4).toFixed(0);
这样您就可以有不同的乘数,但每个单位也可以有不同的格式。
我可能会用 if-else
而不是三元来重构代码。这样可以更容易地根据所选单位实施不同的行为(转换、格式化...):
const $value = $('#value');
const $unit = $('#unit');
const $result = $('#result');
function updateConverstion() {
const value = parseFloat($value.val());
const unit = $unit.val();
let targetValue;
let targetUnit;
if (unit === 'in') {
// Show centimeters without decimals:
targetValue = Math.round(value * 2.54);
targetUnit = 'cm';
} else {
// Show inches with 1 decimal:
targetValue = (value * 0.393701).toFixed(1);
targetUnit = 'in';
}
$result.text(`${ value } ${ unit } = ${ targetValue } ${ targetUnit }`);
}
$value.on('input', updateConverstion);
$unit.on('change', updateConverstion);
updateConverstion();
<input type="text" value="100" id="value" />
<select id="unit">
<option value="cm" selected>Centimeters</option>
<option value="in">Inches</option>
</select>
<p id="result"></p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我有一个开关可以将我的数字转换为厘米或英寸,保留一位小数。
但是,我希望厘米没有小数点,而英寸有 1 位小数。
这是我当前的代码:
function converTo(scale) {
$('#ct_size_guide-1761 td').each(() => {
// I forgot exact conversion:
var multiplier = (scale == 'in') ? 2.5 : 0.4;
var newVal=(parseFloat($(this).text()) * multiplier).toFixed(1);
$(this).text(newVal);
$(this).siblings('.scale').text((scale=='in')? 'cm' : 'in') ;
});
}
您只需要有条件地格式化数字,就像您根据所选单位为 multiplier
使用不同的值一样。
所以你需要替换:
var multiplier = scale === 'in' ? 2.5 : 0.4;
var newVal = (parseFloat($(this).text()) * multiplier).toFixed(1);
与类似的东西:
var newVal = scale === 'in'
? (parseFloat($(this).text()) * 2.5).toFixed(1)
: (parseFloat($(this).text()) * 0.4).toFixed(0);
这样您就可以有不同的乘数,但每个单位也可以有不同的格式。
我可能会用 if-else
而不是三元来重构代码。这样可以更容易地根据所选单位实施不同的行为(转换、格式化...):
const $value = $('#value');
const $unit = $('#unit');
const $result = $('#result');
function updateConverstion() {
const value = parseFloat($value.val());
const unit = $unit.val();
let targetValue;
let targetUnit;
if (unit === 'in') {
// Show centimeters without decimals:
targetValue = Math.round(value * 2.54);
targetUnit = 'cm';
} else {
// Show inches with 1 decimal:
targetValue = (value * 0.393701).toFixed(1);
targetUnit = 'in';
}
$result.text(`${ value } ${ unit } = ${ targetValue } ${ targetUnit }`);
}
$value.on('input', updateConverstion);
$unit.on('change', updateConverstion);
updateConverstion();
<input type="text" value="100" id="value" />
<select id="unit">
<option value="cm" selected>Centimeters</option>
<option value="in">Inches</option>
</select>
<p id="result"></p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>