28 if (IsJSPrimitiveWrapper(*value)) {
33 isolate, NewTypeError(MessageTemplate::kNotGeneric,
34 isolate->factory()->NewStringFromAsciiChecked(
35 "Number.prototype.toExponential"),
36 isolate->factory()->Number_string()));
41 double fraction_digits_number;
43 isolate, fraction_digits_number,
46 if (std::isnan(value_number))
return ReadOnlyRoots(isolate).NaN_string();
47 if (std::isinf(value_number)) {
48 return (value_number < 0.0) ?
ReadOnlyRoots(isolate).minus_Infinity_string()
51 if (fraction_digits_number < 0.0 ||
54 isolate, NewRangeError(MessageTemplate::kNumberFormatRange,
55 isolate->factory()->NewStringFromAsciiChecked(
58 int const f = IsUndefined(*
args.atOrUndefined(isolate, 1), isolate)
60 :
static_cast<int>(fraction_digits_number);
65 isolate->factory()->NewStringFromAsciiChecked(str);
76 if (IsJSPrimitiveWrapper(*value)) {
81 isolate, NewTypeError(MessageTemplate::kNotGeneric,
82 isolate->factory()->NewStringFromAsciiChecked(
83 "Number.prototype.toFixed"),
84 isolate->factory()->Number_string()));
89 double fraction_digits_number;
91 isolate, fraction_digits_number,
95 if (fraction_digits_number < 0.0 ||
98 isolate, NewRangeError(MessageTemplate::kNumberFormatRange,
99 isolate->factory()->NewStringFromAsciiChecked(
100 "toFixed() digits")));
103 if (std::isnan(value_number))
return ReadOnlyRoots(isolate).NaN_string();
104 if (std::isinf(value_number)) {
105 return (value_number < 0.0) ?
ReadOnlyRoots(isolate).minus_Infinity_string()
111 value_number,
static_cast<int>(fraction_digits_number), buffer);
113 isolate->factory()->NewStringFromAsciiChecked(str);
120 const char* method_name =
"Number.prototype.toLocaleString";
127 if (IsJSPrimitiveWrapper(*value)) {
134 NewTypeError(MessageTemplate::kNotGeneric,
135 isolate->factory()->NewStringFromAsciiChecked(method_name),
136 isolate->factory()->Number_string()));
139#ifdef V8_INTL_SUPPORT
143 args.atOrUndefined(isolate, 2), method_name));
146 return *isolate->factory()->NumberToString(value);
157 if (IsJSPrimitiveWrapper(*value)) {
162 isolate, NewTypeError(MessageTemplate::kNotGeneric,
163 isolate->factory()->NewStringFromAsciiChecked(
164 "Number.prototype.toPrecision"),
165 isolate->factory()->Number_string()));
171 return *isolate->factory()->NumberToString(value);
175 double precision_number;
179 if (std::isnan(value_number))
return ReadOnlyRoots(isolate).NaN_string();
180 if (std::isinf(value_number)) {
181 return (value_number < 0.0) ?
ReadOnlyRoots(isolate).minus_Infinity_string()
186 isolate, NewRangeError(MessageTemplate::kToPrecisionFormatRange));
191 value_number,
static_cast<int>(precision_number), buffer);
193 isolate->factory()->NewStringFromAsciiChecked(str);
static V8_WARN_UNUSED_RESULT MaybeDirectHandle< String > NumberToLocaleString(Isolate *isolate, Handle< Object > num, DirectHandle< Object > locales, DirectHandle< Object > options, const char *method_name)
static double NumberValue(Tagged< Number > obj)
static V8_WARN_UNUSED_RESULT Maybe< double > IntegerValue(Isolate *isolate, HandleType< T > input)
#define THROW_NEW_ERROR_RETURN_FAILURE(isolate, call)
#define RETURN_RESULT_OR_FAILURE(isolate, call)
#define MAYBE_ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, dst, call)
base::Vector< const DirectHandle< Object > > args
ZoneVector< RpoNumber > & result
constexpr Vector< T > ArrayVector(T(&arr)[N])
V8_INLINE IndirectHandle< T > handle(Tagged< T > object, Isolate *isolate)
constexpr int kDoubleToPrecisionMaxChars
bool IsNumber(Tagged< Object > obj)
V8_INLINE DirectHandle< T > direct_handle(Tagged< T > object, Isolate *isolate)
std::string_view DoubleToExponentialStringView(double value, int f, base::Vector< char > buffer)
constexpr int kDoubleToFixedMaxChars
constexpr int kDoubleToExponentialMaxChars
std::string_view DoubleToFixedStringView(double value, int f, base::Vector< char > buffer)
std::string_view DoubleToPrecisionStringView(double value, int p, base::Vector< char > buffer)
constexpr int kMaxFractionDigits
Tagged< To > Cast(Tagged< From > value, const v8::SourceLocation &loc=INIT_SOURCE_LOCATION_IN_DEBUG)