You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中PlayerPrefs存储的Float调用ToString格式化失效问题求助

解决方案:PlayerPrefs Float 格式化时间失效问题

问题根源

ToString(@"mm\:ss\:fff") 是TimeSpan类型专属的格式化语法,直接对float值调用时,.NET会误将float数值解析为DateTime.Ticks(1Tick=100纳秒),而非你实际存储的秒数,导致格式化结果完全不符合预期。而你的计时器变量time应为TimeSpan类型,因此能正常生效。

直接修复方案

将PlayerPrefs获取的float秒数,转换为TimeSpan对象后再格式化:

// 读取并转换
float rawTime = PlayerPrefs.GetFloat("overallTime");
TimeSpan formattedTime = TimeSpan.FromSeconds(rawTime);

// 格式化显示
bestTimeText.text = "Best Time: " + formattedTime.ToString(@"mm\:ss\:fff");

进阶优化(提升精度)

由于PlayerPrefs的float是单精度浮点数,存储秒数时可能丢失精度。如果需要更高精度的时间记录,可以改用存储TimeSpan的Ticks值(长整型):

// 存储最佳时间时
TimeSpan bestTime = TimeSpan.FromSeconds(yourTimerValue);
PlayerPrefs.SetString("overallTimeTicks", bestTime.Ticks.ToString());

// 读取并格式化时
if (PlayerPrefs.HasKey("overallTimeTicks"))
{
    long ticks = long.Parse(PlayerPrefs.GetString("overallTimeTicks"));
    TimeSpan formattedTime = TimeSpan.FromTicks(ticks);
    bestTimeText.text = "Best Time: " + formattedTime.ToString(@"mm\:ss\:fff");
}

额外提示

如果玩家的最佳时长可能超过60分钟,建议将格式字符串改为@"hh\:mm\:ss\:fff",避免分钟数显示为大于59的数值。

内容的提问来源于stack exchange,提问作者Kik-Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 21:26:03