首页 > 解决方案 > 将十进制转换为小时和分钟 - Javascript

问题描述

我只是想不通为什么这对一些奇数值不起作用。例如,当尝试将 22.68 转换为小时和分钟时,输出为 22:40.800000000000004(甚至不应该出现秒)

if (str_HR_PER_WEEK.indexOf('.') > -1)
    {
        var str_HR_PER_WEEK_hrs = str_HR_PER_WEEK.substring(0 , str_HR_PER_WEEK.indexOf('.'));
        var str_HR_PER_WEEK_mins = str_HR_PER_WEEK.substring(str_HR_PER_WEEK.indexOf('.') + 1);
        var float_HR_PER_WEEK_mins = parseFloat("0." + (str_HR_PER_WEEK_mins), 10);
        var float_HR_PER_WEEK_mins_actual = float_HR_PER_WEEK_mins * 60;
        float_HR_PER_WEEK_mins_actual = float_HR_PER_WEEK_mins_actual.toString();

        tables.CURRENT_EMPLOYEES.HOURS_PER_WEEK.value = getTwoDigitTime(str_HR_PER_WEEK_hrs) + ":" + getTwoDigitTime(float_HR_PER_WEEK_mins_actual);
    }
else
    {
        tables.CURRENT_EMPLOYEES.HOURS_PER_WEEK.value = str_HR_PER_WEEK;
    }

标签: javascript

解决方案


你必须有方法来实现这一点,

一,自己计算

var decimalTimeString = "1.6578";
var decimalTime = parseFloat(decimalTimeString);
decimalTime = decimalTime * 60 * 60;
var hours = Math.floor((decimalTime / (60 * 60)));
decimalTime = decimalTime - (hours * 60 * 60);
var minutes = Math.floor((decimalTime / 60));
decimalTime = decimalTime - (minutes * 60);
var seconds = Math.round(decimalTime);
if(hours < 10)
{
    hours = "0" + hours;
}
if(minutes < 10)
{
    minutes = "0" + minutes;
}
if(seconds < 10)
{
    seconds = "0" + seconds;
}
alert("" + hours + ":" + minutes + ":" + seconds);

二,使用内置函数转换为字符串,然后转换为 hh:mm

var decimalTimeString = "1.6578";
var n = new Date(0,0);
n.setSeconds(+decimalTimeString * 60 * 60);
n.setMinutes(+decimalTimeString * 60); 
var result = n.toTimeString().slice(0, 5);
document.write(result);

推荐阅读