问题陈述:
编写一个方法whatTime,它采用int,seconds,表示从某一天午夜开始的秒数,并返回一个格式为“:”的字符串。此处,表示自午夜以来的完整小时数,表示自上一完整小时结束以来的完整分钟数,以及自上一完整分钟结束以来的秒数。和中的每一个都应该是整数,没有额外的前导0。因此,如果秒为0,则应返回“0:0:0”,而如果秒为3661,则应返回“1:1:1”
我的算法:
以下是我的算法对输入3661的工作原理:
然而,产生的输出是1:1:0。我尝试使用print语句,“answer3”变量的值似乎是0.999,这就是为什么要打印整数部分(0)。我试着用数学。函数将值四舍五入,并生成正确的输出。然而,当我提交代码时,我只能得到大约60分/250分(TopCoder SRM 144 Div2)。任何改进算法的见解都会很有帮助。
public class Time
{
public String whatTime(int seconds)
{
double answer1,answer2,answer3; int H;
answer1=(double)seconds/3600;
H=(int)answer1;
answer2=(double)((answer1-H)*60);
int M=(int)answer2;
answer3=answer2-M;
answer3=(double)answer3*60;
int S=(int)answer3;
String answer=Integer.toString(H);
answer=Integer.toString(H)+":"+Integer.toString(M)+":"+Integer.toString(S);
return answer;
}
}
您可以通过使用ints解决此问题:
避免浮点值,并完全使用int或long。
public String whatTime(int seconds) {
int secondVal = seconds % 60;
int minutes = seconds / 60;
int minuteVal = minutes % 60;
int hours = minutes / 60;
int hourVal = hours % 24;
int daysVal = hours / 24;
String answer = "" + daysVal + ":" + hourVal + ":" + minuteVal + ":" + secondVal;
return answer;
}
可以更优雅地进行格式化,但这是基本思想。
问题内容: 我有一个关于精度损失的问题 我的任务是将数字打印为字符串 例如0.2 * 7 = 1.4000000000000001; 0.0000014 / 10 = 1.3999999999999998E-7 如何解决这个问题? UPD :主要问题是 字符串 输出格式。我不担心丢失约0.00000001的值。现在,我将其解析为String.format(“%f”,value),但我认为这不是一个
有人知道为什么。
问题内容: 我的代码是 编译时出现以下错误 但是,当我使用它代替它成功编译时,那么我的问题是,当所有3个变量(即a,b和c)都是字节数据类型时,为什么需要强制转换? 问题答案: ,此处的运算符将返回,这就是您需要使用强制转换的原因。
我需要解析一个给定的类型(例如:长整型),它用科学记数法表示。例子: 我知道给定字符串的类型,但我不能使用strtoll,因为数字是用科学符号表示的。我所做的是使用strtod转换它,对int64_t进行错误检查,并将其转换回int64_t。ErrCheckInt和ErrCheck Double对整型和浮点型进行错误检查(溢出、下溢等),并将数字强制转换为任何类型。 问题是,当我用双精度解析int
我是java初学者,遇到过这个错误。 但是错误指向了+号,这是怎么了?上面写着发现:双倍。但我希望我的输出是双倍。但它说作为必需的int。
问题内容: 我有一个原始浮点数,需要作为原始双数。简单地将浮标转换为两倍会给我带来额外的精度。例如: 但是,如果我不是强制类型转换,而是将浮点数输出为字符串,然后将字符串解析为双精度,那么我将得到所需的内容: 有没有比String返回更好的方法了? 问题答案: 这并不是说你实际上获得了更高的精度-而是浮标没有准确地代表你最初瞄准的数字。双被精确地表示原始浮子; 显示的是已经存在的“额外”数据。 例